summaryrefslogtreecommitdiff
path: root/external
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.com>2020-12-16 21:03:44 +0100
committerMiklos Vajna <vmiklos@collabora.com>2020-12-17 09:08:37 +0100
commit89d8c762496cf874d6352167df280c33b7ba5ea0 (patch)
treef73e4813c36354fe56f12238eb49ffc35cc12792 /external
parent252cdd5f43d65095543e317d37e1a0ea4fd839e0 (diff)
pdfium: backport GetTrailerEnds whitespace fix
Fixes the problem that sometimes a valid sig is detected as a partial one. Change-Id: I68107569bf8c331170902b1918a70ea4b9b659a2 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107856 Tested-by: Jenkins Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Diffstat (limited to 'external')
-rw-r--r--external/pdfium/FPDF_GetTrailerEnds-make-this-not-depend-on-whitespa.patch.155
-rw-r--r--external/pdfium/UnpackedTarball_pdfium.mk3
2 files changed, 58 insertions, 0 deletions
diff --git a/external/pdfium/FPDF_GetTrailerEnds-make-this-not-depend-on-whitespa.patch.1 b/external/pdfium/FPDF_GetTrailerEnds-make-this-not-depend-on-whitespa.patch.1
new file mode 100644
index 000000000000..10398bae6415
--- /dev/null
+++ b/external/pdfium/FPDF_GetTrailerEnds-make-this-not-depend-on-whitespa.patch.1
@@ -0,0 +1,55 @@
+From c10d17dee78d48d5e56da965e0cd02d28fd513a5 Mon Sep 17 00:00:00 2001
+From: Miklos Vajna <vmiklos@collabora.co.uk>
+Date: Wed, 9 Dec 2020 17:42:53 +0000
+Subject: [PATCH] FPDF_GetTrailerEnds: make this not depend on whitespace
+
+PDF-1.7 calls out no bytes other than whitespace when specifying what
+can occur between endstream and endobj, so whitespace needs to be
+handled. When CPDF_SyntaxParser::ReadStream() reads the stream, it reads
+'endobj', and then resets the position back to the end of 'endstream'.
+This mechanism is disabled in case there is whitespace between the
+tokens and the newline, see the end of the function.
+
+This results in reporting no trailer ends, as the parsing fails, as the
+next token is expected to be 'endobj', but it's the ID of the next
+object instead.
+
+Fix the problem by handling whitespace in
+CPDF_SyntaxParser::ReadStream() where it was looking for \ntoken\n, not
+allowing whitespace between the token and the following newline.
+
+Change-Id: I7048e8d081af04af3dd08d957212c885b7982b5e
+Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/76850
+Commit-Queue: Tom Sepez <tsepez@chromium.org>
+Reviewed-by: Tom Sepez <tsepez@chromium.org>
+---
+ core/fpdfapi/parser/cpdf_syntax_parser.cpp | 8 ++
+ fpdfsdk/fpdf_view_embeddertest.cpp | 14 +++
+ .../resources/trailer_end_trailing_space.in | 86 ++++++++++++++++
+ .../resources/trailer_end_trailing_space.pdf | 99 +++++++++++++++++++
+ 4 files changed, 207 insertions(+)
+ create mode 100644 testing/resources/trailer_end_trailing_space.in
+ create mode 100644 testing/resources/trailer_end_trailing_space.pdf
+
+diff --git a/core/fpdfapi/parser/cpdf_syntax_parser.cpp b/core/fpdfapi/parser/cpdf_syntax_parser.cpp
+index 06389bccc..5318efdc1 100644
+--- a/core/fpdfapi/parser/cpdf_syntax_parser.cpp
++++ b/core/fpdfapi/parser/cpdf_syntax_parser.cpp
+@@ -795,6 +795,14 @@ RetainPtr<CPDF_Stream> CPDF_SyntaxParser::ReadStream(
+ memset(m_WordBuffer, 0, kEndObjStr.GetLength() + 1);
+ GetNextWordInternal(nullptr);
+
++ // Allow whitespace after endstream and before a newline.
++ unsigned char ch = 0;
++ while (GetNextChar(ch)) {
++ if (!PDFCharIsWhitespace(ch) || PDFCharIsLineEnding(ch))
++ break;
++ }
++ SetPos(GetPos() - 1);
++
+ int numMarkers = ReadEOLMarkers(GetPos());
+ if (m_WordSize == static_cast<unsigned int>(kEndObjStr.GetLength()) &&
+ numMarkers != 0 &&
+--
+2.26.2
+
diff --git a/external/pdfium/UnpackedTarball_pdfium.mk b/external/pdfium/UnpackedTarball_pdfium.mk
index c0cc000e40be..87012e73f931 100644
--- a/external/pdfium/UnpackedTarball_pdfium.mk
+++ b/external/pdfium/UnpackedTarball_pdfium.mk
@@ -17,7 +17,10 @@ pdfium_patches += c++20-comparison.patch
pdfium_patches += AnnotationInkAndVertices.patch.1
pdfium_patches += AnnotationBorderProperties.patch.1
pdfium_patches += AnnotationLineStartAndEnd.patch.1
+# Backport of <https://pdfium-review.googlesource.com/c/pdfium/+/75910>.
pdfium_patches += SignatureGetDocMDPPermission.patch.1
+# Backport of <https://pdfium-review.googlesource.com/c/pdfium/+/76850>.
+pdfium_patches += FPDF_GetTrailerEnds-make-this-not-depend-on-whitespa.patch.1
# Work around <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94141> "c++20 rewritten operator==
# recursive call mixing friend and external operators for template class" in GCC with