aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libqpdf/Pl_AES_PDF.cc13
1 files changed, 9 insertions, 4 deletions
diff --git a/libqpdf/Pl_AES_PDF.cc b/libqpdf/Pl_AES_PDF.cc
index d9754981..a43d7e69 100644
--- a/libqpdf/Pl_AES_PDF.cc
+++ b/libqpdf/Pl_AES_PDF.cc
@@ -102,10 +102,15 @@ Pl_AES_PDF::finish()
{
if (this->offset != this->buf_size)
{
- throw std::runtime_error(
- "aes encrypted stream length was not a multiple of " +
- QUtil::int_to_string(this->buf_size) + " bytes (offset = " +
- QUtil::int_to_string(this->offset) + ")");
+ // This is never supposed to happen as the output is
+ // always supposed to be padded. However, we have
+ // encountered files for which the output is not a
+ // multiple of the block size. In this case, pad with
+ // zeroes and hope for the best.
+ assert(this->buf_size > this->offset);
+ std::memset(this->inbuf + this->offset, 0,
+ this->buf_size - this->offset);
+ this->offset = this->buf_size;
}
flush(true);
}