diff options
author | Miklos Vajna <vmiklos@collabora.com> | 2021-01-12 21:07:24 +0100 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.com> | 2021-01-13 08:33:14 +0100 |
commit | 229ee7c0ff5a69f09d6ac87dd585a11a8aacdcab (patch) | |
tree | 925a49070d87d8128e86a1ff79cc9e0f7fd5bff6 /external | |
parent | 0c03a97fb8844ad0de1abea79b5265617a509460 (diff) |
external: update pdfium to 4380
Allows dropping 5 upstreamed patches.
Change-Id: I5f77502c5a2d11288b060956e69fd7767f52ab97
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/109195
Tested-by: Jenkins
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Diffstat (limited to 'external')
-rw-r--r-- | external/pdfium/AnnotationBorderProperties.patch.1 | 89 | ||||
-rw-r--r-- | external/pdfium/AnnotationInkAndVertices.patch.1 | 260 | ||||
-rw-r--r-- | external/pdfium/AnnotationLineStartAndEnd.patch.1 | 103 | ||||
-rw-r--r-- | external/pdfium/FPDF_GetTrailerEnds-make-this-not-depend-on-whitespa.patch.1 | 55 | ||||
-rw-r--r-- | external/pdfium/SignatureGetDocMDPPermission.patch.1 | 345 | ||||
-rw-r--r-- | external/pdfium/UnpackedTarball_pdfium.mk | 11 |
6 files changed, 0 insertions, 863 deletions
diff --git a/external/pdfium/AnnotationBorderProperties.patch.1 b/external/pdfium/AnnotationBorderProperties.patch.1 deleted file mode 100644 index 0dc42e1f95f5..000000000000 --- a/external/pdfium/AnnotationBorderProperties.patch.1 +++ /dev/null @@ -1,89 +0,0 @@ -From 305d2ed186c9e1e7c3d0f914235e926e27b35a9f Mon Sep 17 00:00:00 2001 -From: Miklos Vajna <vmiklos@collabora.co.uk> -Date: Tue, 15 Dec 2020 17:28:49 +0000 -Subject: [PATCH] Add FPDFAnnot_GetBorder() API - -This is similar to FPDFAnnot_GetLine(), but a /Border key is valid for -all annotation types. - -The array can have an optional 4th element, but that itself doesn't have -a fixed size, so it's not exposed by this API -- could be done by a -separate function. - -Change-Id: I796c2ea17be1f039a6c6129dbde0b0a22276e19a -Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/77010 -Commit-Queue: Tom Sepez <tsepez@chromium.org> -Reviewed-by: Tom Sepez <tsepez@chromium.org> ---- - fpdfsdk/fpdf_annot.cpp | 23 +++++++++++++++++ - fpdfsdk/fpdf_annot_embeddertest.cpp | 40 +++++++++++++++++++++++++++++ - fpdfsdk/fpdf_view_c_api_test.c | 1 + - public/fpdf_annot.h | 16 ++++++++++++ - testing/resources/line_annot.in | 2 ++ - testing/resources/line_annot.pdf | 6 +++-- - 6 files changed, 86 insertions(+), 2 deletions(-) - -diff --git a/fpdfsdk/fpdf_annot.cpp b/fpdfsdk/fpdf_annot.cpp -index 85f86e547..eee3567d4 100644 ---- a/fpdfsdk/fpdf_annot.cpp -+++ b/fpdfsdk/fpdf_annot.cpp -@@ -913,6 +913,29 @@ FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFAnnot_GetLine(FPDF_ANNOTATION annot, - return true; - } - -+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV -+FPDFAnnot_GetBorder(FPDF_ANNOTATION annot, -+ float* horizontal_radius, -+ float* vertical_radius, -+ float* border_width) { -+ if (!horizontal_radius || !vertical_radius || !border_width) -+ return false; -+ -+ CPDF_Dictionary* annot_dict = GetAnnotDictFromFPDFAnnotation(annot); -+ if (!annot_dict) -+ return false; -+ -+ CPDF_Array* border = annot_dict->GetArrayFor(pdfium::annotation::kBorder); -+ if (!border || border->size() < 3) -+ return false; -+ -+ *horizontal_radius = border->GetNumberAt(0); -+ *vertical_radius = border->GetNumberAt(1); -+ *border_width = border->GetNumberAt(2); -+ -+ return true; -+} -+ - FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFAnnot_HasKey(FPDF_ANNOTATION annot, - FPDF_BYTESTRING key) { - CPDF_Dictionary* pAnnotDict = GetAnnotDictFromFPDFAnnotation(annot); -diff --git a/public/fpdf_annot.h b/public/fpdf_annot.h -index 6c8a237e7..2b708af13 100644 ---- a/public/fpdf_annot.h -+++ b/public/fpdf_annot.h -@@ -452,6 +452,22 @@ FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFAnnot_GetLine(FPDF_ANNOTATION annot, - FS_POINTF* start, - FS_POINTF* end); - -+// Experimental API. -+// Get the characteristics of the annotation's border (rounded rectangle). -+// -+// annot - handle to an annotation, as returned by e.g. FPDFPage_GetAnnot() -+// horizontal_radius - horizontal corner radius, in default user space units -+// vertical_radius - vertical corner radius, in default user space units -+// border_width - border width, in default user space units -+// -+// Returns true if |horizontal_radius|, |vertical_radius| and |border_width| are -+// not NULL, false otherwise. -+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV -+FPDFAnnot_GetBorder(FPDF_ANNOTATION annot, -+ float* horizontal_radius, -+ float* vertical_radius, -+ float* border_width); -+ - // Experimental API. - // Check if |annot|'s dictionary has |key| as a key. - // --- -2.26.2 - diff --git a/external/pdfium/AnnotationInkAndVertices.patch.1 b/external/pdfium/AnnotationInkAndVertices.patch.1 deleted file mode 100644 index d7cce4f27df2..000000000000 --- a/external/pdfium/AnnotationInkAndVertices.patch.1 +++ /dev/null @@ -1,260 +0,0 @@ -From 09ecef60e8292457d9e78a2242f5efec953c2c25 Mon Sep 17 00:00:00 2001 -From: Miklos Vajna <vmiklos@collabora.co.uk> -Date: Tue, 10 Nov 2020 21:50:38 +0000 -Subject: [PATCH] Add FPDFAnnot_GetVertices() API - -This follows the same pattern as FPDF_GetTrailerEnds(), so the client -has to call this function twice, but allocation of the buffer happens -outside pdfium. - -Change-Id: Ic733083eba0b110310d6bbdc48f874bac4c7f2d6 -Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/76050 -Commit-Queue: Miklos V <vmiklos@collabora.co.uk> -Commit-Queue: Tom Sepez <tsepez@chromium.org> -Reviewed-by: Tom Sepez <tsepez@chromium.org> ---- - constants/annotation_common.h | 3 ++ - fpdfsdk/fpdf_annot.cpp | 28 ++++++++++++ - fpdfsdk/fpdf_annot_embeddertest.cpp | 67 +++++++++++++++++++++++++++++ - fpdfsdk/fpdf_view_c_api_test.c | 1 + - public/fpdf_annot.h | 16 +++++++ - testing/resources/polygon_annot.in | 48 +++++++++++++++++++++ - testing/resources/polygon_annot.pdf | 60 ++++++++++++++++++++++++++ - 7 files changed, 223 insertions(+) - create mode 100644 testing/resources/polygon_annot.in - create mode 100644 testing/resources/polygon_annot.pdf - -diff --git a/constants/annotation_common.h b/constants/annotation_common.h -index 471d24407..6f96e623a 100644 ---- a/constants/annotation_common.h -+++ b/constants/annotation_common.h -@@ -26,6 +26,9 @@ constexpr char kC[] = "C"; - constexpr char kStructParent[] = "StructParent"; - constexpr char kOC[] = "OC"; - -+// Entries for polygon and polyline annotations. -+constexpr char kVertices[] = "Vertices"; -+ - } // namespace annotation - } // namespace pdfium - -diff --git a/fpdfsdk/fpdf_annot.cpp b/fpdfsdk/fpdf_annot.cpp -index 28dbe145d..13c73f6aa 100644 ---- a/fpdfsdk/fpdf_annot.cpp -+++ b/fpdfsdk/fpdf_annot.cpp -@@ -809,6 +809,34 @@ FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFAnnot_GetRect(FPDF_ANNOTATION annot, - return true; - } - -+FPDF_EXPORT unsigned long FPDF_CALLCONV -+FPDFAnnot_GetVertices(FPDF_ANNOTATION annot, -+ FS_POINTF* buffer, -+ unsigned long length) { -+ FPDF_ANNOTATION_SUBTYPE subtype = FPDFAnnot_GetSubtype(annot); -+ if (subtype != FPDF_ANNOT_POLYGON && subtype != FPDF_ANNOT_POLYLINE) -+ return 0; -+ -+ CPDF_Dictionary* annot_dict = GetAnnotDictFromFPDFAnnotation(annot); -+ if (!annot_dict) -+ return 0; -+ -+ CPDF_Array* vertices = annot_dict->GetArrayFor(pdfium::annotation::kVertices); -+ if (!vertices) -+ return 0; -+ -+ // Truncate to an even number. -+ unsigned long points_len = vertices->size() / 2; -+ if (buffer && length >= points_len) { -+ for (unsigned long i = 0; i < points_len; ++i) { -+ buffer[i].x = vertices->GetNumberAt(i * 2); -+ buffer[i].y = vertices->GetNumberAt(i * 2 + 1); -+ } -+ } -+ -+ return points_len; -+} -+ - FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFAnnot_HasKey(FPDF_ANNOTATION annot, - FPDF_BYTESTRING key) { - CPDF_Dictionary* pAnnotDict = GetAnnotDictFromFPDFAnnotation(annot); -diff --git a/public/fpdf_annot.h b/public/fpdf_annot.h -index 93064561b..7159602db 100644 ---- a/public/fpdf_annot.h -+++ b/public/fpdf_annot.h -@@ -395,6 +395,22 @@ FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFAnnot_SetRect(FPDF_ANNOTATION annot, - FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFAnnot_GetRect(FPDF_ANNOTATION annot, - FS_RECTF* rect); - -+// Experimental API. -+// Get the vertices of a polygon or polyline annotation. |buffer| is an array of -+// points of the annotation. If |length| is less than the returned length, or -+// |annot| or |buffer| is NULL, |buffer| will not be modified. -+// -+// annot - handle to an annotation, as returned by e.g. FPDFPage_GetAnnot() -+// buffer - buffer for holding the points. -+// length - length of the buffer in points. -+// -+// Returns the number of points if the annotation is of type polygon or -+// polyline, 0 otherwise. -+FPDF_EXPORT unsigned long FPDF_CALLCONV -+FPDFAnnot_GetVertices(FPDF_ANNOTATION annot, -+ FS_POINTF* buffer, -+ unsigned long length); -+ - // Experimental API. - // Check if |annot|'s dictionary has |key| as a key. - // --- -2.26.2 - -From 8f7b1aed53e31eda9870146cb97602f03a8f23c4 Mon Sep 17 00:00:00 2001 -From: Miklos Vajna <vmiklos@collabora.co.uk> -Date: Tue, 17 Nov 2020 16:53:14 +0000 -Subject: [PATCH] Add FPDFAnnot_GetInkListPath() API - -This is somewhat similar to FPDFAnnot_GetVertices(), but this is for ink -annotations and here the value is an array of paths. - -So first add an FPDFAnnot_GetInkListCount() to get the number of paths, -then FPDFAnnot_GetInkListPath() can be used to get the individual paths. - -Change-Id: I204a5a53e949fdbb7b264711c27107fe62c9f2be -Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/76350 -Commit-Queue: Tom Sepez <tsepez@chromium.org> -Reviewed-by: Tom Sepez <tsepez@chromium.org> ---- - constants/annotation_common.h | 3 + - fpdfsdk/fpdf_annot.cpp | 50 ++++++++++++++++ - fpdfsdk/fpdf_annot_embeddertest.cpp | 91 ++++++++++++++++++++++++++++- - fpdfsdk/fpdf_view_c_api_test.c | 2 + - public/fpdf_annot.h | 28 +++++++++ - testing/resources/ink_annot.in | 48 +++++++++++++++ - testing/resources/ink_annot.pdf | 60 +++++++++++++++++++ - 7 files changed, 281 insertions(+), 1 deletion(-) - create mode 100644 testing/resources/ink_annot.in - create mode 100644 testing/resources/ink_annot.pdf - -diff --git a/constants/annotation_common.h b/constants/annotation_common.h -index 6f96e623a..be6420651 100644 ---- a/constants/annotation_common.h -+++ b/constants/annotation_common.h -@@ -29,6 +29,9 @@ constexpr char kOC[] = "OC"; - // Entries for polygon and polyline annotations. - constexpr char kVertices[] = "Vertices"; - -+// Entries for ink annotations -+constexpr char kInkList[] = "InkList"; -+ - } // namespace annotation - } // namespace pdfium - -diff --git a/fpdfsdk/fpdf_annot.cpp b/fpdfsdk/fpdf_annot.cpp -index 13c73f6aa..51b4332c2 100644 ---- a/fpdfsdk/fpdf_annot.cpp -+++ b/fpdfsdk/fpdf_annot.cpp -@@ -296,6 +296,18 @@ CPDFSDK_Widget* GetRadioButtonOrCheckBoxWidget(FPDF_FORMHANDLE hHandle, - return pFormControl ? pForm->GetWidget(pFormControl) : nullptr; - } - -+CPDF_Array* GetInkList(FPDF_ANNOTATION annot) { -+ FPDF_ANNOTATION_SUBTYPE subtype = FPDFAnnot_GetSubtype(annot); -+ if (subtype != FPDF_ANNOT_INK) -+ return 0; -+ -+ CPDF_Dictionary* annot_dict = GetAnnotDictFromFPDFAnnotation(annot); -+ if (!annot_dict) -+ return 0; -+ -+ return annot_dict->GetArrayFor(pdfium::annotation::kInkList); -+} -+ - } // namespace - - FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV -@@ -837,6 +849,44 @@ FPDFAnnot_GetVertices(FPDF_ANNOTATION annot, - return points_len; - } - -+FPDF_EXPORT unsigned long FPDF_CALLCONV -+FPDFAnnot_GetInkListCount(FPDF_ANNOTATION annot) { -+ CPDF_Array* ink_list = GetInkList(annot); -+ if (!ink_list) -+ return 0; -+ -+ return ink_list->size(); -+} -+ -+FPDF_EXPORT unsigned long FPDF_CALLCONV -+FPDFAnnot_GetInkListPath(FPDF_ANNOTATION annot, -+ unsigned long path_index, -+ FS_POINTF* buffer, -+ unsigned long length) { -+ unsigned long path_count = FPDFAnnot_GetInkListCount(annot); -+ if (path_index >= path_count) -+ return 0; -+ -+ CPDF_Array* ink_list = GetInkList(annot); -+ if (!ink_list) -+ return 0; -+ -+ CPDF_Array* path = ink_list->GetArrayAt(path_index); -+ if (!path) -+ return 0; -+ -+ // Truncate to an even number. -+ unsigned long points_len = path->size() / 2; -+ if (buffer && length >= points_len) { -+ for (unsigned long i = 0; i < points_len; ++i) { -+ buffer[i].x = path->GetNumberAt(i * 2); -+ buffer[i].y = path->GetNumberAt(i * 2 + 1); -+ } -+ } -+ -+ return points_len; -+} -+ - FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFAnnot_HasKey(FPDF_ANNOTATION annot, - FPDF_BYTESTRING key) { - CPDF_Dictionary* pAnnotDict = GetAnnotDictFromFPDFAnnotation(annot); -diff --git a/public/fpdf_annot.h b/public/fpdf_annot.h -index 7159602db..d121344f7 100644 ---- a/public/fpdf_annot.h -+++ b/public/fpdf_annot.h -@@ -411,6 +411,34 @@ FPDFAnnot_GetVertices(FPDF_ANNOTATION annot, - FS_POINTF* buffer, - unsigned long length); - -+// Experimental API. -+// Get the number of paths in the ink list of an ink annotation. -+// -+// annot - handle to an annotation, as returned by e.g. FPDFPage_GetAnnot() -+// -+// Returns the number of paths in the ink list if the annotation is of type ink, -+// 0 otherwise. -+FPDF_EXPORT unsigned long FPDF_CALLCONV -+FPDFAnnot_GetInkListCount(FPDF_ANNOTATION annot); -+ -+// Experimental API. -+// Get a path in the ink list of an ink annotation. |buffer| is an array of -+// points of the path. If |length| is less than the returned length, or |annot| -+// or |buffer| is NULL, |buffer| will not be modified. -+// -+// annot - handle to an annotation, as returned by e.g. FPDFPage_GetAnnot() -+// path_index - index of the path -+// buffer - buffer for holding the points. -+// length - length of the buffer in points. -+// -+// Returns the number of points of the path if the annotation is of type ink, 0 -+// otherwise. -+FPDF_EXPORT unsigned long FPDF_CALLCONV -+FPDFAnnot_GetInkListPath(FPDF_ANNOTATION annot, -+ unsigned long path_index, -+ FS_POINTF* buffer, -+ unsigned long length); -+ - // Experimental API. - // Check if |annot|'s dictionary has |key| as a key. - // --- -2.26.2 - diff --git a/external/pdfium/AnnotationLineStartAndEnd.patch.1 b/external/pdfium/AnnotationLineStartAndEnd.patch.1 deleted file mode 100644 index 0a40905abada..000000000000 --- a/external/pdfium/AnnotationLineStartAndEnd.patch.1 +++ /dev/null @@ -1,103 +0,0 @@ -From 30f45a6f043fc1bbd19eb4820261c45ad68cf1cc Mon Sep 17 00:00:00 2001 -From: Miklos Vajna <vmiklos@collabora.co.uk> -Date: Fri, 4 Dec 2020 19:12:31 +0000 -Subject: [PATCH] Add FPDFAnnot_GetLine() API - -This is similar to FPDFAnnot_GetVertices() for polygon/polyline -annotations, but this one is for line annotations and the point list has -a fixed size of 2. - -Change-Id: If910caaef8c41a9965f2ba47f87c34ea33355f99 -Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/76730 -Commit-Queue: Tom Sepez <tsepez@chromium.org> -Reviewed-by: Tom Sepez <tsepez@chromium.org> ---- - constants/annotation_common.h | 3 ++ - fpdfsdk/fpdf_annot.cpp | 26 +++++++++++++ - fpdfsdk/fpdf_annot_embeddertest.cpp | 45 ++++++++++++++++++++++ - fpdfsdk/fpdf_view_c_api_test.c | 1 + - public/fpdf_annot.h | 13 +++++++ - testing/resources/line_annot.in | 48 +++++++++++++++++++++++ - testing/resources/line_annot.pdf | 60 +++++++++++++++++++++++++++++ - 7 files changed, 196 insertions(+) - create mode 100644 testing/resources/line_annot.in - create mode 100644 testing/resources/line_annot.pdf - -diff --git a/constants/annotation_common.h b/constants/annotation_common.h -index be6420651..656842bb5 100644 ---- a/constants/annotation_common.h -+++ b/constants/annotation_common.h -@@ -32,6 +32,9 @@ constexpr char kVertices[] = "Vertices"; - // Entries for ink annotations - constexpr char kInkList[] = "InkList"; - -+// Entries for line annotations -+constexpr char kL[] = "L"; -+ - } // namespace annotation - } // namespace pdfium - -diff --git a/fpdfsdk/fpdf_annot.cpp b/fpdfsdk/fpdf_annot.cpp -index 51b4332c2..85f86e547 100644 ---- a/fpdfsdk/fpdf_annot.cpp -+++ b/fpdfsdk/fpdf_annot.cpp -@@ -887,6 +887,32 @@ FPDFAnnot_GetInkListPath(FPDF_ANNOTATION annot, - return points_len; - } - -+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFAnnot_GetLine(FPDF_ANNOTATION annot, -+ FS_POINTF* start, -+ FS_POINTF* end) { -+ if (!start || !end) -+ return false; -+ -+ FPDF_ANNOTATION_SUBTYPE subtype = FPDFAnnot_GetSubtype(annot); -+ if (subtype != FPDF_ANNOT_LINE) -+ return false; -+ -+ CPDF_Dictionary* annot_dict = GetAnnotDictFromFPDFAnnotation(annot); -+ if (!annot_dict) -+ return false; -+ -+ CPDF_Array* line = annot_dict->GetArrayFor(pdfium::annotation::kL); -+ if (!line || line->size() < 4) -+ return false; -+ -+ start->x = line->GetNumberAt(0); -+ start->y = line->GetNumberAt(1); -+ end->x = line->GetNumberAt(2); -+ end->y = line->GetNumberAt(3); -+ -+ return true; -+} -+ - FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFAnnot_HasKey(FPDF_ANNOTATION annot, - FPDF_BYTESTRING key) { - CPDF_Dictionary* pAnnotDict = GetAnnotDictFromFPDFAnnotation(annot); -diff --git a/public/fpdf_annot.h b/public/fpdf_annot.h -index d121344f7..6c8a237e7 100644 ---- a/public/fpdf_annot.h -+++ b/public/fpdf_annot.h -@@ -439,6 +439,19 @@ FPDFAnnot_GetInkListPath(FPDF_ANNOTATION annot, - FS_POINTF* buffer, - unsigned long length); - -+// Experimental API. -+// Get the starting and ending coordinates of a line annotation. -+// -+// annot - handle to an annotation, as returned by e.g. FPDFPage_GetAnnot() -+// start - starting point -+// end - ending point -+// -+// Returns true if the annotation is of type line, |start| and |end| are not -+// NULL, false otherwise. -+FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFAnnot_GetLine(FPDF_ANNOTATION annot, -+ FS_POINTF* start, -+ FS_POINTF* end); -+ - // Experimental API. - // Check if |annot|'s dictionary has |key| as a key. - // --- -2.26.2 - 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 deleted file mode 100644 index 10398bae6415..000000000000 --- a/external/pdfium/FPDF_GetTrailerEnds-make-this-not-depend-on-whitespa.patch.1 +++ /dev/null @@ -1,55 +0,0 @@ -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/SignatureGetDocMDPPermission.patch.1 b/external/pdfium/SignatureGetDocMDPPermission.patch.1 deleted file mode 100644 index 0304ad0999ce..000000000000 --- a/external/pdfium/SignatureGetDocMDPPermission.patch.1 +++ /dev/null @@ -1,345 +0,0 @@ -From f63c9650bca285932fb4dced804f9eec7e40b5ff Mon Sep 17 00:00:00 2001 -From: Miklos Vajna <vmiklos@collabora.co.uk> -Date: Tue, 3 Nov 2020 16:32:12 +0000 -Subject: [PATCH] Add FPDFSignatureObj_GetDocMDPPermission() - -A document is OK to not contain any explicit markup for this, in which -case 0 is returned. If a permission parameter is found, then the -returned level of 1, 2 or 3 controls if no incremental updates are -allowed (1) or incremental updates are OK, but annotations are not -allowed (2) or even annotations are allowed (3). - -Note how there is a difference between omitting just the /P key -(implicitly means 2) and omitting the more of this markup, which will -return 0. - -This API is meant to be used in combination with the -FPDF_GetTrailerEnds() API, which allows detecting additional incremental -updates after a signature. For example, if a comment is added after -signing, then Permission=1 would result in an invalid signature, while -Permission=3 just results in a partial signature. - -Change-Id: I911e9ddaff3a687729e7fe610c013b2ce3283d36 -Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/75910 -Commit-Queue: Tom Sepez <tsepez@chromium.org> -Reviewed-by: Tom Sepez <tsepez@chromium.org> ---- - fpdfsdk/fpdf_signature.cpp | 41 ++++++++++ - fpdfsdk/fpdf_signature_embeddertest.cpp | 13 +++ - fpdfsdk/fpdf_view_c_api_test.c | 1 + - public/fpdf_signature.h | 11 +++ - testing/resources/docmdp.in | 88 ++++++++++++++++++++ - testing/resources/docmdp.pdf | 102 ++++++++++++++++++++++++ - 6 files changed, 256 insertions(+) - create mode 100644 testing/resources/docmdp.in - create mode 100644 testing/resources/docmdp.pdf - -diff --git a/fpdfsdk/fpdf_signature.cpp b/fpdfsdk/fpdf_signature.cpp -index b438b8f6a..975c2522e 100644 ---- a/fpdfsdk/fpdf_signature.cpp -+++ b/fpdfsdk/fpdf_signature.cpp -@@ -157,3 +157,44 @@ FPDFSignatureObj_GetTime(FPDF_SIGNATURE signature, - - return NulTerminateMaybeCopyAndReturnLength(obj->GetString(), buffer, length); - } -+ -+FPDF_EXPORT unsigned int FPDF_CALLCONV -+FPDFSignatureObj_GetDocMDPPermission(FPDF_SIGNATURE signature) { -+ int permission = 0; -+ CPDF_Dictionary* signature_dict = CPDFDictionaryFromFPDFSignature(signature); -+ if (!signature_dict) -+ return permission; -+ -+ CPDF_Dictionary* value_dict = signature_dict->GetDictFor("V"); -+ if (!value_dict) -+ return permission; -+ -+ CPDF_Array* references = value_dict->GetArrayFor("Reference"); -+ if (!references) -+ return permission; -+ -+ CPDF_ArrayLocker locker(references); -+ for (auto& reference : locker) { -+ CPDF_Dictionary* reference_dict = reference->GetDict(); -+ if (!reference_dict) -+ continue; -+ -+ ByteString transform_method = reference_dict->GetNameFor("TransformMethod"); -+ if (transform_method != "DocMDP") -+ continue; -+ -+ CPDF_Dictionary* transform_params = -+ reference_dict->GetDictFor("TransformParams"); -+ if (!transform_params) -+ continue; -+ -+ // Valid values are 1, 2 and 3; 2 is the default. -+ permission = transform_params->GetIntegerFor("P", 2); -+ if (permission < 1 || permission > 3) -+ permission = 0; -+ -+ return permission; -+ } -+ -+ return permission; -+} -diff --git a/fpdfsdk/fpdf_signature_embeddertest.cpp b/fpdfsdk/fpdf_signature_embeddertest.cpp -index d2fd9c663..e91d9c221 100644 ---- a/fpdfsdk/fpdf_signature_embeddertest.cpp -+++ b/fpdfsdk/fpdf_signature_embeddertest.cpp -@@ -187,3 +187,16 @@ TEST_F(FPDFSignatureEmbedderTest, GetTime) { - EXPECT_EQ('x', time_buffer[0]); - EXPECT_EQ('\0', time_buffer[1]); - } -+ -+TEST_F(FPDFSignatureEmbedderTest, GetDocMDPPermission) { -+ ASSERT_TRUE(OpenDocument("docmdp.pdf")); -+ FPDF_SIGNATURE signature = FPDF_GetSignatureObject(document(), 0); -+ ASSERT_NE(nullptr, signature); -+ -+ // FPDFSignatureObj_GetDocMDPPermission() positive testing. -+ unsigned int permission = FPDFSignatureObj_GetDocMDPPermission(signature); -+ EXPECT_EQ(1U, permission); -+ -+ // FPDFSignatureObj_GetDocMDPPermission() negative testing. -+ EXPECT_EQ(0U, FPDFSignatureObj_GetDocMDPPermission(nullptr)); -+} -diff --git a/fpdfsdk/fpdf_view_c_api_test.c b/fpdfsdk/fpdf_view_c_api_test.c -index 7708cbab9..1142725d6 100644 ---- a/fpdfsdk/fpdf_view_c_api_test.c -+++ b/fpdfsdk/fpdf_view_c_api_test.c -@@ -320,6 +320,7 @@ int CheckPDFiumCApi() { - // fpdf_signature.h - CHK(FPDFSignatureObj_GetByteRange); - CHK(FPDFSignatureObj_GetContents); -+ CHK(FPDFSignatureObj_GetDocMDPPermission); - CHK(FPDFSignatureObj_GetReason); - CHK(FPDFSignatureObj_GetSubFilter); - CHK(FPDFSignatureObj_GetTime); -diff --git a/public/fpdf_signature.h b/public/fpdf_signature.h -index f20d9add3..702b67bae 100644 ---- a/public/fpdf_signature.h -+++ b/public/fpdf_signature.h -@@ -137,6 +137,17 @@ FPDFSignatureObj_GetTime(FPDF_SIGNATURE signature, - char* buffer, - unsigned long length); - -+// Experimental API. -+// Function: FPDFSignatureObj_GetDocMDPPermission -+// Get the DocMDP permission of a signature object. -+// Parameters: -+// signature - Handle to the signature object. Returned by -+// FPDF_GetSignatureObject(). -+// Return value: -+// Returns the permission (1, 2 or 3) on success, 0 on error. -+FPDF_EXPORT unsigned int FPDF_CALLCONV -+FPDFSignatureObj_GetDocMDPPermission(FPDF_SIGNATURE signature); -+ - #ifdef __cplusplus - } // extern "C" - #endif // __cplusplus -diff --git a/testing/resources/docmdp.in b/testing/resources/docmdp.in -new file mode 100644 -index 000000000..a8fe28373 ---- /dev/null -+++ b/testing/resources/docmdp.in -@@ -0,0 +1,88 @@ -+{{header}} -+{{object 1 0}} << -+ /Type /Catalog -+ /Pages 2 0 R -+ /AcroForm << -+ /Fields [7 0 R] -+ /SigFlags 3 -+ >> -+>> -+endobj -+endobj -+{{object 2 0}} << -+ /Type /Pages -+ /MediaBox [0 0 200 300] -+ /Count 1 -+ /Kids [3 0 R] -+>> -+endobj -+{{object 3 0}} << -+ /Type /Page -+ /Parent 2 0 R -+ /Contents 4 0 R -+ /Annots [7 0 R] -+>> -+endobj -+{{object 4 0}} << -+ {{streamlen}} -+>> -+stream -+q -+0 0 0 rg -+0 290 10 10 re B* -+10 150 50 30 re B* -+0 0 1 rg -+190 290 10 10 re B* -+70 232 50 30 re B* -+0 1 0 rg -+190 0 10 10 re B* -+130 150 50 30 re B* -+1 0 0 rg -+0 0 10 10 re B* -+70 67 50 30 re B* -+Q -+endstream -+endobj -+{{object 5 0}} << -+ /Type /Sig -+ /Reference [ -+ << -+ /Type /SigRef -+ /TransformMethod /DocMDP -+ /TransformParams << -+ /Type /TransformParams -+ /P 1 -+ /V /1.2 -+ >> -+ >> -+ ] -+>> -+endobj -+{{object 6 0}} << -+ /Type /XObject -+ /Subtype /Form -+ /BBox [0 0 0 0] -+ /Length 0 -+>> -+stream -+endstream -+endobj -+{{object 7 0}} << -+ /Type /Annot -+ /Subtype /Widget -+ /FT /Sig -+ /F 132 -+ /Rect [0 0 0 0] -+ /P 3 0 R -+ /T (Signature1) -+ /V 5 0 R -+ /DV 5 0 R -+ /AP << -+ /N 6 0 R -+ >> -+>> -+endobj -+{{xref}} -+{{trailer}} -+{{startxref}} -+%%EOF -diff --git a/testing/resources/docmdp.pdf b/testing/resources/docmdp.pdf -new file mode 100644 -index 000000000..0191a0029 ---- /dev/null -+++ b/testing/resources/docmdp.pdf -@@ -0,0 +1,102 @@ -+%PDF-1.7 -+% -+1 0 obj << -+ /Type /Catalog -+ /Pages 2 0 R -+ /AcroForm << -+ /Fields [7 0 R] -+ /SigFlags 3 -+ >> -+>> -+endobj -+endobj -+2 0 obj << -+ /Type /Pages -+ /MediaBox [0 0 200 300] -+ /Count 1 -+ /Kids [3 0 R] -+>> -+endobj -+3 0 obj << -+ /Type /Page -+ /Parent 2 0 R -+ /Contents 4 0 R -+ /Annots [7 0 R] -+>> -+endobj -+4 0 obj << -+ /Length 188 -+>> -+stream -+q -+0 0 0 rg -+0 290 10 10 re B* -+10 150 50 30 re B* -+0 0 1 rg -+190 290 10 10 re B* -+70 232 50 30 re B* -+0 1 0 rg -+190 0 10 10 re B* -+130 150 50 30 re B* -+1 0 0 rg -+0 0 10 10 re B* -+70 67 50 30 re B* -+Q -+endstream -+endobj -+5 0 obj << -+ /Type /Sig -+ /Reference [ -+ << -+ /Type /SigRef -+ /TransformMethod /DocMDP -+ /TransformParams << -+ /Type /TransformParams -+ /P 1 -+ /V /1.2 -+ >> -+ >> -+ ] -+>> -+endobj -+6 0 obj << -+ /Type /XObject -+ /Subtype /Form -+ /BBox [0 0 0 0] -+ /Length 0 -+>> -+stream -+endstream -+endobj -+7 0 obj << -+ /Type /Annot -+ /Subtype /Widget -+ /FT /Sig -+ /F 132 -+ /Rect [0 0 0 0] -+ /P 3 0 R -+ /T (Signature1) -+ /V 5 0 R -+ /DV 5 0 R -+ /AP << -+ /N 6 0 R -+ >> -+>> -+endobj -+xref -+0 8 -+0000000000 65535 f -+0000000015 00000 n -+0000000131 00000 n -+0000000220 00000 n -+0000000307 00000 n -+0000000547 00000 n -+0000000760 00000 n -+0000000862 00000 n -+trailer << -+ /Root 1 0 R -+ /Size 8 -+>> -+startxref -+1034 -+%%EOF --- -2.26.2 - diff --git a/external/pdfium/UnpackedTarball_pdfium.mk b/external/pdfium/UnpackedTarball_pdfium.mk index cc7e0ff58d0c..11cd2193bb47 100644 --- a/external/pdfium/UnpackedTarball_pdfium.mk +++ b/external/pdfium/UnpackedTarball_pdfium.mk @@ -14,17 +14,6 @@ pdfium_patches += build.patch.1 # Avoids Windows 8 build dependency. pdfium_patches += windows7.patch.1 pdfium_patches += c++20-comparison.patch -# Backport of <https://pdfium-review.googlesource.com/c/pdfium/+/76050> and -# <https://pdfium-review.googlesource.com/c/pdfium/+/76350>. -pdfium_patches += AnnotationInkAndVertices.patch.1 -# Backport of <https://pdfium-review.googlesource.com/c/pdfium/+/76730>. -pdfium_patches += AnnotationLineStartAndEnd.patch.1 -# Backport of <https://pdfium-review.googlesource.com/c/pdfium/+/77010>. -pdfium_patches += AnnotationBorderProperties.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 |