Reland "Filter out "Type" and "DecodeParms" from trailer keys."
This reverts commit 466bd4f4e0cb2bc2a7b3626948609268c52c4690.
Reason for revert: On closer inspection, it seems the test is not
flaky, and the root cause of the failure is an SEH exception,
which is the true source of flakiness. Other tests are also affected.
Original change's description:
> Revert "Filter out "Type" and "DecodeParms" from trailer keys."
>
> This reverts commit 5f7c5be8b7072d46e8d8088a1ec14370ecfad44c.
>
> Reason for revert: New test is flaky, ID is not stable.
>
> Original change's description:
> > Filter out "Type" and "DecodeParms" from trailer keys.
> >
> > Bug: pdfium:873
> > Change-Id: I12ae5b8776f5a73c4be81bed53ada05c94d46882
> > Reviewed-on: https://pdfium-review.googlesource.com/32190
> > Reviewed-by: dsinclair <dsinclair@chromium.org>
> > Commit-Queue: dsinclair <dsinclair@chromium.org>
>
> TBR=dsinclair@chromium.org,hnakashima@chromium.org
>
> # Not skipping CQ checks because original CL landed > 1 day ago.
>
> Bug: pdfium:873
> Change-Id: I642771e12c61181c7b81681dae7b2f5549c14b18
> Reviewed-on: https://pdfium-review.googlesource.com/32430
> Reviewed-by: Henrique Nakashima <hnakashima@chromium.org>
> Commit-Queue: Henrique Nakashima <hnakashima@chromium.org>
TBR=dsinclair@chromium.org,hnakashima@chromium.org
Change-Id: I2552729610c9f8adf02c70a2a43e2383ceda19b5
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: pdfium:873
Reviewed-on: https://pdfium-review.googlesource.com/32397
Reviewed-by: Henrique Nakashima <hnakashima@chromium.org>
Commit-Queue: Henrique Nakashima <hnakashima@chromium.org>
diff --git a/core/fpdfapi/edit/cpdf_creator.cpp b/core/fpdfapi/edit/cpdf_creator.cpp
index 1e33bbc..71237f7 100644
--- a/core/fpdfapi/edit/cpdf_creator.cpp
+++ b/core/fpdfapi/edit/cpdf_creator.cpp
@@ -627,7 +627,8 @@
CPDF_Object* pValue = it.second.get();
if (key == "Encrypt" || key == "Size" || key == "Filter" ||
key == "Index" || key == "Length" || key == "Prev" || key == "W" ||
- key == "XRefStm" || key == "ID") {
+ key == "XRefStm" || key == "ID" || key == "DecodeParms" ||
+ key == "Type") {
continue;
}
if (!m_Archive->WriteString(("/")) ||
diff --git a/core/fpdfapi/edit/cpdf_creator_embeddertest.cpp b/core/fpdfapi/edit/cpdf_creator_embeddertest.cpp
index 1913c4b..f8520c4 100644
--- a/core/fpdfapi/edit/cpdf_creator_embeddertest.cpp
+++ b/core/fpdfapi/edit/cpdf_creator_embeddertest.cpp
@@ -2,6 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include <cstring>
#include <memory>
#include <string>
#include <vector>
@@ -12,6 +13,7 @@
#include "public/fpdf_edit.h"
#include "public/fpdfview.h"
#include "testing/embedder_test.h"
+#include "testing/gmock/include/gmock/gmock-matchers.h"
#include "testing/gtest/include/gtest/gtest.h"
class CPDF_CreatorEmbedderTest : public EmbedderTest {};
@@ -42,3 +44,21 @@
// The sizes of saved docs should be equal.
EXPECT_EQ(saved_doc_1.size(), saved_doc_2.size());
}
+
+TEST_F(CPDF_CreatorEmbedderTest, BUG_873) {
+ EXPECT_TRUE(OpenDocument("embedded_attachments.pdf"));
+ EXPECT_TRUE(FPDF_SaveAsCopy(document(), this, 0));
+
+ // Cannot match second part of the ID since it is randomly generated.
+ std::string saved_data = GetString();
+ const char kTrailerBeforeSecondID[] =
+ "trailer\r\n<</Info 9 0 R /Root 11 0 R /Size "
+ "36/ID[<D889EB6B9ADF88E5EDA7DC08FE85978B><";
+ ASSERT_THAT(saved_data, testing::HasSubstr(kTrailerBeforeSecondID));
+ size_t trailer_start = saved_data.find(kTrailerBeforeSecondID);
+ constexpr size_t kIdLen = 32;
+ size_t trailer_continuation =
+ trailer_start + strlen(kTrailerBeforeSecondID) + kIdLen;
+ std::string data_after_second_id = saved_data.substr(trailer_continuation);
+ EXPECT_THAT(data_after_second_id, testing::StartsWith(">]>>\r\n"));
+}