From 7941d368db7e8671696549d6de794b4ee7ca3855 Mon Sep 17 00:00:00 2001 From: Eugene Bochilo Date: Sat, 1 Feb 2025 03:30:30 +0000 Subject: [PATCH] Fix DocumentRevisionsValidator producing false negative result because of Tabs entry modification DEVSIX-8818 Autoported commit. Original commit hash: [ce35dbce5] --- ...cumentRevisionsValidatorIntegrationTest.cs | 37 ++++++++++++++++++ ...tionModificationAllowedTabsChangesTest.pdf | Bin 0 -> 19939 bytes ...nModificationNotAllowedTabsChangesTest.pdf | Bin 0 -> 19939 bytes ...ficationNotAllowedTabsSetToDefaultTest.pdf | Bin 0 -> 19939 bytes .../validation/DocumentRevisionsValidator.cs | 17 ++++++++ port-hash | 2 +- 6 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 itext.tests/itext.sign.tests/resources/itext/signatures/validation/DocumentRevisionsValidatorIntegrationTest/annotationModificationAllowedTabsChangesTest.pdf create mode 100644 itext.tests/itext.sign.tests/resources/itext/signatures/validation/DocumentRevisionsValidatorIntegrationTest/annotationModificationNotAllowedTabsChangesTest.pdf create mode 100644 itext.tests/itext.sign.tests/resources/itext/signatures/validation/DocumentRevisionsValidatorIntegrationTest/annotationModificationNotAllowedTabsSetToDefaultTest.pdf diff --git a/itext.tests/itext.sign.tests/itext/signatures/validation/DocumentRevisionsValidatorIntegrationTest.cs b/itext.tests/itext.sign.tests/itext/signatures/validation/DocumentRevisionsValidatorIntegrationTest.cs index 2b444482d5..9db676ffe2 100644 --- a/itext.tests/itext.sign.tests/itext/signatures/validation/DocumentRevisionsValidatorIntegrationTest.cs +++ b/itext.tests/itext.sign.tests/itext/signatures/validation/DocumentRevisionsValidatorIntegrationTest.cs @@ -468,6 +468,43 @@ public virtual void TaggedDocRemoveStructTreeElementTest(bool continueValidation } } + [NUnit.Framework.TestCaseSource("CreateParameters")] + public virtual void AnnotationModificationAllowedTabsChangesTest(bool continueValidationAfterFail) { + SetUp(continueValidationAfterFail); + using (PdfDocument document = new PdfDocument(new PdfReader(SOURCE_FOLDER + "annotationModificationAllowedTabsChangesTest.pdf" + ))) { + DocumentRevisionsValidator validator = builder.BuildDocumentRevisionsValidator(); + ValidationReport report = validator.ValidateAllDocumentRevisions(validationContext, document); + AssertValidationReport.AssertThat(report, (a) => a.HasStatus(ValidationReport.ValidationResult.VALID).HasNumberOfLogs + (0)); + } + } + + [NUnit.Framework.TestCaseSource("CreateParameters")] + public virtual void AnnotationModificationNotAllowedTabsChangesTest(bool continueValidationAfterFail) { + SetUp(continueValidationAfterFail); + using (PdfDocument document = new PdfDocument(new PdfReader(SOURCE_FOLDER + "annotationModificationNotAllowedTabsChangesTest.pdf" + ))) { + DocumentRevisionsValidator validator = builder.BuildDocumentRevisionsValidator(); + ValidationReport report = validator.ValidateAllDocumentRevisions(validationContext, document); + AssertValidationReport.AssertThat(report, (a) => a.HasStatus(ValidationReport.ValidationResult.INVALID).HasNumberOfFailures + (1).HasLogItem((l) => l.WithCheckName(DocumentRevisionsValidator.DOC_MDP_CHECK).WithMessage(DocumentRevisionsValidator + .TABS_MODIFIED).WithStatus(ReportItem.ReportItemStatus.INVALID))); + } + } + + [NUnit.Framework.TestCaseSource("CreateParameters")] + public virtual void AnnotationModificationNotAllowedTabsSetToDefaultTest(bool continueValidationAfterFail) { + SetUp(continueValidationAfterFail); + using (PdfDocument document = new PdfDocument(new PdfReader(SOURCE_FOLDER + "annotationModificationNotAllowedTabsSetToDefaultTest.pdf" + ))) { + DocumentRevisionsValidator validator = builder.BuildDocumentRevisionsValidator(); + ValidationReport report = validator.ValidateAllDocumentRevisions(validationContext, document); + AssertValidationReport.AssertThat(report, (a) => a.HasStatus(ValidationReport.ValidationResult.VALID).HasNumberOfLogs + (0)); + } + } + [NUnit.Framework.TestCaseSource("CreateParameters")] public virtual void OutlinesNotModifiedTest(bool continueValidationAfterFail) { SetUp(continueValidationAfterFail); diff --git a/itext.tests/itext.sign.tests/resources/itext/signatures/validation/DocumentRevisionsValidatorIntegrationTest/annotationModificationAllowedTabsChangesTest.pdf b/itext.tests/itext.sign.tests/resources/itext/signatures/validation/DocumentRevisionsValidatorIntegrationTest/annotationModificationAllowedTabsChangesTest.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9db70e7eee42b747f7c1e4d72c9e4406e8c15738 GIT binary patch literal 19939 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 literal 0 HcmV?d00001 diff --git a/itext.tests/itext.sign.tests/resources/itext/signatures/validation/DocumentRevisionsValidatorIntegrationTest/annotationModificationNotAllowedTabsChangesTest.pdf b/itext.tests/itext.sign.tests/resources/itext/signatures/validation/DocumentRevisionsValidatorIntegrationTest/annotationModificationNotAllowedTabsChangesTest.pdf new file mode 100644 index 0000000000000000000000000000000000000000..95a551a793422bf6d4b590cb2b94d20de265b19d GIT binary patch literal 19939 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 UtMmGzy*QgR^Mh!1Jkad_1ebko)c^nh literal 0 HcmV?d00001 diff --git a/itext.tests/itext.sign.tests/resources/itext/signatures/validation/DocumentRevisionsValidatorIntegrationTest/annotationModificationNotAllowedTabsSetToDefaultTest.pdf b/itext.tests/itext.sign.tests/resources/itext/signatures/validation/DocumentRevisionsValidatorIntegrationTest/annotationModificationNotAllowedTabsSetToDefaultTest.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a29f030a6649c252e0bb56f790aabddea3609730 GIT binary patch literal 19939 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 prevAnnots = new List(); diff --git a/port-hash b/port-hash index 31eca6a608..82e8c5e5ee 100644 --- a/port-hash +++ b/port-hash @@ -1 +1 @@ -8d4fbb6308e2126af33891bf5ad981ec9f2fd81b +ce35dbce51bd8c3f1b01e78313f1f5a2a02201ff