File qpdf-CVE-2021-36978.patch of Package qpdf.25219
Index: qpdf-8.0.2/libqpdf/Pl_AES_PDF.cc
===================================================================
--- qpdf-8.0.2.orig/libqpdf/Pl_AES_PDF.cc
+++ qpdf-8.0.2/libqpdf/Pl_AES_PDF.cc
@@ -260,6 +260,6 @@ Pl_AES_PDF::flush(bool strip_padding)
}
}
}
- getNext()->write(this->outbuf, bytes);
this->offset = 0;
+ getNext()->write(this->outbuf, bytes);
}
Index: qpdf-8.0.2/libqpdf/Pl_ASCII85Decoder.cc
===================================================================
--- qpdf-8.0.2.orig/libqpdf/Pl_ASCII85Decoder.cc
+++ qpdf-8.0.2/libqpdf/Pl_ASCII85Decoder.cc
@@ -119,10 +119,13 @@ Pl_ASCII85Decoder::flush()
QTC::TC("libtests", "Pl_ASCII85Decoder partial flush",
(this->pos == 5) ? 0 : 1);
- getNext()->write(outbuf, this->pos - 1);
-
+ // Reset before calling getNext()->write in case that throws an
+ // exception.
+ int t = this->pos - 1;
this->pos = 0;
memset(this->inbuf, 117, 5);
+
+ getNext()->write(outbuf, t);
}
void
Index: qpdf-8.0.2/libqpdf/Pl_ASCIIHexDecoder.cc
===================================================================
--- qpdf-8.0.2.orig/libqpdf/Pl_ASCIIHexDecoder.cc
+++ qpdf-8.0.2/libqpdf/Pl_ASCIIHexDecoder.cc
@@ -97,12 +97,14 @@ Pl_ASCIIHexDecoder::flush()
QTC::TC("libtests", "Pl_ASCIIHexDecoder partial flush",
(this->pos == 2) ? 0 : 1);
- getNext()->write(&ch, 1);
-
+ // Reset before calling getNext()->write in case that throws an
+ // exception.
this->pos = 0;
this->inbuf[0] = '0';
this->inbuf[1] = '0';
this->inbuf[2] = '\0';
+
+ getNext()->write(&ch, 1);
}
void
Index: qpdf-8.0.2/libqpdf/Pl_Count.cc
===================================================================
--- qpdf-8.0.2.orig/libqpdf/Pl_Count.cc
+++ qpdf-8.0.2/libqpdf/Pl_Count.cc
@@ -17,8 +17,8 @@ Pl_Count::write(unsigned char* buf, size
if (len)
{
this->count += len;
- getNext()->write(buf, len);
this->last_char = buf[len - 1];
+ getNext()->write(buf, len);
}
}