diff --git a/itext.tests/itext.kernel.tests/itext/kernel/pdf/PdfActionTest.cs b/itext.tests/itext.kernel.tests/itext/kernel/pdf/PdfActionTest.cs index c34de555d6..cd96dd8c5c 100644 --- a/itext.tests/itext.kernel.tests/itext/kernel/pdf/PdfActionTest.cs +++ b/itext.tests/itext.kernel.tests/itext/kernel/pdf/PdfActionTest.cs @@ -70,6 +70,19 @@ public virtual void ActionTest02() { , destinationFolder + "actionTest02.pdf", "http://itextpdf.com")); } + [NUnit.Framework.Test] + public virtual void ActionTest03() { + PdfDocument document = CreateDocument(CompareTool.CreateTestPdfWriter(destinationFolder + "actionTest03.pdf" + ), true); + String uri = "http://itextpdf.com/"; + document.GetCatalog().SetOpenAction(PdfAction.CreateURI(new Uri(uri))); + NUnit.Framework.Assert.AreEqual(new PdfString(uri), document.GetCatalog().GetPdfObject().GetAsDictionary(PdfName + .OpenAction).Get(PdfName.URI)); + document.Close(); + System.Console.Out.WriteLine(MessageFormatUtil.Format("Please open document {0} and make sure that you're automatically redirected to {1} site." + , destinationFolder + "actionTest01.pdf", "http://itextpdf.com")); + } + [NUnit.Framework.Test] public virtual void SoundActionTest() { String fileName = "soundActionTest.pdf"; diff --git a/itext.tests/itext.kernel.tests/resources/itext/kernel/colors/gradients/StrategyBasedLinearGradientBuilderTest/cmp_builderWithNoneSpreadingTest.pdf b/itext.tests/itext.kernel.tests/resources/itext/kernel/colors/gradients/StrategyBasedLinearGradientBuilderTest/cmp_builderWithNoneSpreadingTest.pdf deleted file mode 100644 index 0271f03480..0000000000 Binary files a/itext.tests/itext.kernel.tests/resources/itext/kernel/colors/gradients/StrategyBasedLinearGradientBuilderTest/cmp_builderWithNoneSpreadingTest.pdf and /dev/null differ diff --git a/itext.tests/itext.kernel.tests/resources/itext/kernel/crypto/pdfencryption/PdfEncryptionTest/cmp_stamped_encryptAes256FullCompression.pdf b/itext.tests/itext.kernel.tests/resources/itext/kernel/crypto/pdfencryption/PdfEncryptionTest/cmp_stamped_encryptAes256FullCompression.pdf deleted file mode 100644 index a80b36ae25..0000000000 Binary files a/itext.tests/itext.kernel.tests/resources/itext/kernel/crypto/pdfencryption/PdfEncryptionTest/cmp_stamped_encryptAes256FullCompression.pdf and /dev/null differ diff --git a/itext.tests/itext.kernel.tests/resources/itext/kernel/crypto/pdfencryption/PdfEncryptionTest/cmp_stamped_encryptAes256Pdf2NotEncryptMetadata02.pdf b/itext.tests/itext.kernel.tests/resources/itext/kernel/crypto/pdfencryption/PdfEncryptionTest/cmp_stamped_encryptAes256Pdf2NotEncryptMetadata02.pdf deleted file mode 100644 index 194fab2d39..0000000000 Binary files a/itext.tests/itext.kernel.tests/resources/itext/kernel/crypto/pdfencryption/PdfEncryptionTest/cmp_stamped_encryptAes256Pdf2NotEncryptMetadata02.pdf and /dev/null differ diff --git a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/EncodingTest/cmp_Cp855EncodingTimesRomanTest.pdf b/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/EncodingTest/cmp_Cp855EncodingTimesRomanTest.pdf deleted file mode 100644 index 49d681bba8..0000000000 Binary files a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/EncodingTest/cmp_Cp855EncodingTimesRomanTest.pdf and /dev/null differ diff --git a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/PdfDestinationTest/cmp_remoteGoToExplicitDestinationTest.pdf b/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/PdfDestinationTest/cmp_remoteGoToExplicitDestinationTest.pdf deleted file mode 100644 index 37d86fb23e..0000000000 Binary files a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/PdfDestinationTest/cmp_remoteGoToExplicitDestinationTest.pdf and /dev/null differ diff --git a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/PdfDestinationTest/cmp_remoteGoToRDestinationTest.pdf b/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/PdfDestinationTest/cmp_remoteGoToRDestinationTest.pdf deleted file mode 100644 index d00a6ffe06..0000000000 Binary files a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/PdfDestinationTest/cmp_remoteGoToRDestinationTest.pdf and /dev/null differ diff --git a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/PdfFontCacheTest/cmp_symbolTrueTypeFontWinAnsiTest.pdf b/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/PdfFontCacheTest/cmp_symbolTrueTypeFontWinAnsiTest.pdf deleted file mode 100644 index 098948c64f..0000000000 Binary files a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/PdfFontCacheTest/cmp_symbolTrueTypeFontWinAnsiTest.pdf and /dev/null differ diff --git a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/PdfFontTest/cmp_DocumentWithCMR10_5Afm.pdf b/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/PdfFontTest/cmp_DocumentWithCMR10_5Afm.pdf deleted file mode 100644 index 6874cbae3e..0000000000 Binary files a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/PdfFontTest/cmp_DocumentWithCMR10_5Afm.pdf and /dev/null differ diff --git a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/PdfFontTest/cmp_DocumentWithCMR10_5Pfm.pdf b/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/PdfFontTest/cmp_DocumentWithCMR10_5Pfm.pdf deleted file mode 100644 index 79ae8ee3aa..0000000000 Binary files a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/PdfFontTest/cmp_DocumentWithCMR10_5Pfm.pdf and /dev/null differ diff --git a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/PdfStreamTest/cmp_decodeParamsArrayTest.pdf b/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/PdfStreamTest/cmp_decodeParamsArrayTest.pdf deleted file mode 100644 index 30f9b7fa69..0000000000 Binary files a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/PdfStreamTest/cmp_decodeParamsArrayTest.pdf and /dev/null differ diff --git a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/SmartModeTest/cmp_smartModeSameAppearanceStreams.pdf b/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/SmartModeTest/cmp_smartModeSameAppearanceStreams.pdf deleted file mode 100644 index 13fc63343e..0000000000 Binary files a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/SmartModeTest/cmp_smartModeSameAppearanceStreams.pdf and /dev/null differ diff --git a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/XmpWriterTest/cmp_customXmp.pdf b/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/XmpWriterTest/cmp_customXmp.pdf deleted file mode 100644 index 114f8a4632..0000000000 Binary files a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/XmpWriterTest/cmp_customXmp.pdf and /dev/null differ diff --git a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/XmpWriterTest/cmp_customXmp02.pdf b/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/XmpWriterTest/cmp_customXmp02.pdf deleted file mode 100644 index d53b74e0e0..0000000000 Binary files a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/XmpWriterTest/cmp_customXmp02.pdf and /dev/null differ diff --git a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/canvas/ImageMasksTest/cmp_imageResizedParentWithMask.pdf b/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/canvas/ImageMasksTest/cmp_imageResizedParentWithMask.pdf deleted file mode 100644 index 64b28ab4c8..0000000000 Binary files a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/canvas/ImageMasksTest/cmp_imageResizedParentWithMask.pdf and /dev/null differ diff --git a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/canvas/ImageMasksTest/cmp_setDifferentImageMasksOnSameImage.pdf b/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/canvas/ImageMasksTest/cmp_setDifferentImageMasksOnSameImage.pdf deleted file mode 100644 index 820dee2f40..0000000000 Binary files a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/canvas/ImageMasksTest/cmp_setDifferentImageMasksOnSameImage.pdf and /dev/null differ diff --git a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/canvas/PdfCanvasTest/cmp_colorTest01.pdf b/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/canvas/PdfCanvasTest/cmp_colorTest01.pdf deleted file mode 100644 index 0339ca8576..0000000000 Binary files a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/canvas/PdfCanvasTest/cmp_colorTest01.pdf and /dev/null differ diff --git a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/canvas/PdfCanvasTest/cmp_colorTest02.pdf b/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/canvas/PdfCanvasTest/cmp_colorTest02.pdf deleted file mode 100644 index a7a513eb78..0000000000 Binary files a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/canvas/PdfCanvasTest/cmp_colorTest02.pdf and /dev/null differ diff --git a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/canvas/PdfCanvasTest/cmp_colorTest04.pdf b/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/canvas/PdfCanvasTest/cmp_colorTest04.pdf deleted file mode 100644 index dbf2662eb9..0000000000 Binary files a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/canvas/PdfCanvasTest/cmp_colorTest04.pdf and /dev/null differ diff --git a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/canvas/PdfCanvasTest/cmp_colorTest05.pdf b/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/canvas/PdfCanvasTest/cmp_colorTest05.pdf deleted file mode 100644 index f620e80c23..0000000000 Binary files a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/canvas/PdfCanvasTest/cmp_colorTest05.pdf and /dev/null differ diff --git a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/canvas/PdfCanvasTest/cmp_colorTest06.pdf b/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/canvas/PdfCanvasTest/cmp_colorTest06.pdf deleted file mode 100644 index b77911dc8c..0000000000 Binary files a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/canvas/PdfCanvasTest/cmp_colorTest06.pdf and /dev/null differ diff --git a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/canvas/PdfCanvasTest/cmp_inlineImages01.pdf b/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/canvas/PdfCanvasTest/cmp_inlineImages01.pdf deleted file mode 100644 index 343899eb4d..0000000000 Binary files a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/canvas/PdfCanvasTest/cmp_inlineImages01.pdf and /dev/null differ diff --git a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/canvas/PdfCanvasTest/cmp_inlineImages02.pdf b/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/canvas/PdfCanvasTest/cmp_inlineImages02.pdf deleted file mode 100644 index 45cdf37bc0..0000000000 Binary files a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/canvas/PdfCanvasTest/cmp_inlineImages02.pdf and /dev/null differ diff --git a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/canvas/PdfCanvasTest/cmp_inlineImages03.pdf b/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/canvas/PdfCanvasTest/cmp_inlineImages03.pdf deleted file mode 100644 index 5d88b57d0d..0000000000 Binary files a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/canvas/PdfCanvasTest/cmp_inlineImages03.pdf and /dev/null differ diff --git a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/canvas/PdfCanvasTest/cmp_kernedTextTest01.pdf b/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/canvas/PdfCanvasTest/cmp_kernedTextTest01.pdf deleted file mode 100644 index 6fc6a33305..0000000000 Binary files a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/canvas/PdfCanvasTest/cmp_kernedTextTest01.pdf and /dev/null differ diff --git a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/canvas/PdfCanvasTest/cmp_setColorsSameColorSpaces.pdf b/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/canvas/PdfCanvasTest/cmp_setColorsSameColorSpaces.pdf deleted file mode 100644 index 36774960cf..0000000000 Binary files a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/canvas/PdfCanvasTest/cmp_setColorsSameColorSpaces.pdf and /dev/null differ diff --git a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/canvas/PdfCanvasTest/cmp_setColorsSameColorSpacesPattern.pdf b/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/canvas/PdfCanvasTest/cmp_setColorsSameColorSpacesPattern.pdf deleted file mode 100644 index d81cb0a510..0000000000 Binary files a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/canvas/PdfCanvasTest/cmp_setColorsSameColorSpacesPattern.pdf and /dev/null differ diff --git a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/canvas/PdfCanvasXObjectTest/cmp_addXObjectWithXAndYAndWidthCoordinateWithoutMatrixTest.pdf b/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/canvas/PdfCanvasXObjectTest/cmp_addXObjectWithXAndYAndWidthCoordinateWithoutMatrixTest.pdf deleted file mode 100644 index 94e2cee28d..0000000000 Binary files a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/canvas/PdfCanvasXObjectTest/cmp_addXObjectWithXAndYAndWidthCoordinateWithoutMatrixTest.pdf and /dev/null differ diff --git a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/canvas/PdfCanvasXObjectTest/cmp_addXObjectWithXAndYCoordinateTest.pdf b/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/canvas/PdfCanvasXObjectTest/cmp_addXObjectWithXAndYCoordinateTest.pdf deleted file mode 100644 index 63e87e500b..0000000000 Binary files a/itext.tests/itext.kernel.tests/resources/itext/kernel/pdf/canvas/PdfCanvasXObjectTest/cmp_addXObjectWithXAndYCoordinateTest.pdf and /dev/null differ diff --git a/itext.tests/itext.kernel.tests/resources/itext/kernel/utils/flatteningTest/cmp_high_light_flatten.pdf b/itext.tests/itext.kernel.tests/resources/itext/kernel/utils/flatteningTest/cmp_high_light_flatten.pdf deleted file mode 100644 index d25652b469..0000000000 Binary files a/itext.tests/itext.kernel.tests/resources/itext/kernel/utils/flatteningTest/cmp_high_light_flatten.pdf and /dev/null differ diff --git a/itext.tests/itext.sign.tests/itext/signatures/validation/v1/DocumentRevisionsValidatorIntegrationTest.cs b/itext.tests/itext.sign.tests/itext/signatures/validation/v1/DocumentRevisionsValidatorIntegrationTest.cs index 1718b1a996..dd6c1cf806 100644 --- a/itext.tests/itext.sign.tests/itext/signatures/validation/v1/DocumentRevisionsValidatorIntegrationTest.cs +++ b/itext.tests/itext.sign.tests/itext/signatures/validation/v1/DocumentRevisionsValidatorIntegrationTest.cs @@ -411,5 +411,43 @@ public virtual void RemoveUnnamedFieldTest() { )); } } + + [NUnit.Framework.Test] + public virtual void FullCompressionModeLevel1Test() { + using (PdfDocument document = new PdfDocument(new PdfReader(SOURCE_FOLDER + "fullCompressionModeLevel1.pdf" + ))) { + DocumentRevisionsValidator validator = builder.BuildDocumentRevisionsValidator(); + ValidationReport report = validator.ValidateAllDocumentRevisions(validationContext, document); + NUnit.Framework.Assert.AreEqual(AccessPermissions.NO_CHANGES_PERMITTED, validator.GetAccessPermissions()); + AssertValidationReport.AssertThat(report, (a) => a.HasStatus(ValidationReport.ValidationResult.VALID).HasNumberOfFailures + (0).HasNumberOfLogs(0)); + } + } + + [NUnit.Framework.Test] + public virtual void FullCompressionModeLevel2Test() { + using (PdfDocument document = new PdfDocument(new PdfReader(SOURCE_FOLDER + "fullCompressionModeLevel2.pdf" + ))) { + DocumentRevisionsValidator validator = builder.BuildDocumentRevisionsValidator(); + ValidationReport report = validator.ValidateAllDocumentRevisions(validationContext, document); + NUnit.Framework.Assert.AreEqual(AccessPermissions.FORM_FIELDS_MODIFICATION, validator.GetAccessPermissions + ()); + AssertValidationReport.AssertThat(report, (a) => a.HasStatus(ValidationReport.ValidationResult.VALID).HasNumberOfFailures + (0).HasNumberOfLogs(0)); + } + } + + [NUnit.Framework.Test] + public virtual void FullCompressionModeLevel3Test() { + using (PdfDocument document = new PdfDocument(new PdfReader(SOURCE_FOLDER + "fullCompressionModeLevel3.pdf" + ))) { + DocumentRevisionsValidator validator = builder.BuildDocumentRevisionsValidator(); + ValidationReport report = validator.ValidateAllDocumentRevisions(validationContext, document); + NUnit.Framework.Assert.AreEqual(AccessPermissions.ANNOTATION_MODIFICATION, validator.GetAccessPermissions( + )); + AssertValidationReport.AssertThat(report, (a) => a.HasStatus(ValidationReport.ValidationResult.VALID).HasNumberOfFailures + (0).HasNumberOfLogs(0)); + } + } } } diff --git a/itext.tests/itext.sign.tests/itext/signatures/validation/v1/DocumentRevisionsValidatorTest.cs b/itext.tests/itext.sign.tests/itext/signatures/validation/v1/DocumentRevisionsValidatorTest.cs index a274a7b46f..16fe541911 100644 --- a/itext.tests/itext.sign.tests/itext/signatures/validation/v1/DocumentRevisionsValidatorTest.cs +++ b/itext.tests/itext.sign.tests/itext/signatures/validation/v1/DocumentRevisionsValidatorTest.cs @@ -88,10 +88,10 @@ public virtual void MultipleRevisionsDocumentLevel1Test() { ); // Between these two revisions DSS and timestamp are added, which is allowed, // but there is unused entry in the xref table, which is an itext signature generation artifact. - AssertValidationReport.AssertThat(validationReport, (a) => a.HasStatus(ValidationReport.ValidationResult.INVALID - ).HasNumberOfFailures(1).HasNumberOfLogs(1).HasLogItem((l) => l.WithCheckName(DocumentRevisionsValidator + AssertValidationReport.AssertThat(validationReport, (a) => a.HasStatus(ValidationReport.ValidationResult.VALID + ).HasNumberOfFailures(0).HasNumberOfLogs(1).HasLogItem((l) => l.WithCheckName(DocumentRevisionsValidator .DOC_MDP_CHECK).WithMessage(DocumentRevisionsValidator.UNEXPECTED_ENTRY_IN_XREF, (i) => 27).WithStatus - (ReportItem.ReportItemStatus.INVALID))); + (ReportItem.ReportItemStatus.INFO))); validationReport = new ValidationReport(); validator.ValidateRevision(documentRevisions[1], documentRevisions[2], document, validationReport, validationContext ); @@ -231,8 +231,8 @@ public virtual void RandomEntryAddedTest() { public virtual void RandomEntryWithoutUsageTest() { using (PdfDocument document = new PdfDocument(new PdfReader(SOURCE_FOLDER + "randomEntryWithoutUsage.pdf") )) { - DocumentRevisionsValidator validator = builder.BuildDocumentRevisionsValidator(); - validator.SetAccessPermissions(AccessPermissions.NO_CHANGES_PERMITTED); + DocumentRevisionsValidator validator = builder.BuildDocumentRevisionsValidator().SetAccessPermissions(AccessPermissions + .NO_CHANGES_PERMITTED).SetUnexpectedXrefChangesStatus(ReportItem.ReportItemStatus.INVALID); PdfRevisionsReader revisionsReader = new PdfRevisionsReader(document.GetReader()); IList documentRevisions = revisionsReader.GetAllRevisions(); ValidationReport validationReport = new ValidationReport(); diff --git a/itext.tests/itext.sign.tests/itext/signatures/validation/v1/SignatureValidatorIntegrationTest.cs b/itext.tests/itext.sign.tests/itext/signatures/validation/v1/SignatureValidatorIntegrationTest.cs index 341b660740..b053651f2d 100644 --- a/itext.tests/itext.sign.tests/itext/signatures/validation/v1/SignatureValidatorIntegrationTest.cs +++ b/itext.tests/itext.sign.tests/itext/signatures/validation/v1/SignatureValidatorIntegrationTest.cs @@ -186,13 +186,14 @@ public virtual void ValidateMultipleSignaturesUsingLastKnownPoETest() { (trustedCerts)).WithRevocationDataValidator(new MockRevocationDataValidator()).BuildSignatureValidator (); ValidationReport report = signatureValidator.ValidateSignatures(document); - // Document contains invalid unused entry which is invalid according to DocumentRevisionsValidator. - AssertValidationReport.AssertThat(report, (r) => r.HasStatus(ValidationReport.ValidationResult.INVALID).HasNumberOfLogs - (5).HasNumberOfFailures(1).HasLogItem((l) => l.WithCheckName(SignatureValidator.SIGNATURE_VERIFICATION + AssertValidationReport.AssertThat(report, (r) => r.HasStatus(ValidationReport.ValidationResult.VALID).HasNumberOfLogs + (5).HasNumberOfFailures(0).HasLogItem((l) => l.WithCheckName(SignatureValidator.SIGNATURE_VERIFICATION ).WithMessage(SignatureValidator.VALIDATING_SIGNATURE_NAME, (p) => "timestampSig1")).HasLogItem((l) => l.WithCheckName(SignatureValidator.SIGNATURE_VERIFICATION).WithMessage(SignatureValidator.VALIDATING_SIGNATURE_NAME - , (p) => "Signature1")).HasLogItem((l) => l.WithCheckName(DocumentRevisionsValidator.DOC_MDP_CHECK).WithMessage - (DocumentRevisionsValidator.UNEXPECTED_ENTRY_IN_XREF, (p) => "28"))); + , (p) => "Signature1")) + // Document contains unused unexpected entry. + .HasLogItem((l) => l.WithCheckName(DocumentRevisionsValidator.DOC_MDP_CHECK).WithMessage(DocumentRevisionsValidator + .UNEXPECTED_ENTRY_IN_XREF, (p) => "28").WithStatus(ReportItem.ReportItemStatus.INFO))); } } diff --git a/itext.tests/itext.sign.tests/resources/itext/signatures/validation/v1/DocumentRevisionsValidatorIntegrationTest/fullCompressionModeLevel1.pdf b/itext.tests/itext.sign.tests/resources/itext/signatures/validation/v1/DocumentRevisionsValidatorIntegrationTest/fullCompressionModeLevel1.pdf new file mode 100644 index 0000000000..9818ca673e Binary files /dev/null and b/itext.tests/itext.sign.tests/resources/itext/signatures/validation/v1/DocumentRevisionsValidatorIntegrationTest/fullCompressionModeLevel1.pdf differ diff --git a/itext.tests/itext.sign.tests/resources/itext/signatures/validation/v1/DocumentRevisionsValidatorIntegrationTest/fullCompressionModeLevel2.pdf b/itext.tests/itext.sign.tests/resources/itext/signatures/validation/v1/DocumentRevisionsValidatorIntegrationTest/fullCompressionModeLevel2.pdf new file mode 100644 index 0000000000..057e00e10c Binary files /dev/null and b/itext.tests/itext.sign.tests/resources/itext/signatures/validation/v1/DocumentRevisionsValidatorIntegrationTest/fullCompressionModeLevel2.pdf differ diff --git a/itext.tests/itext.sign.tests/resources/itext/signatures/validation/v1/DocumentRevisionsValidatorIntegrationTest/fullCompressionModeLevel3.pdf b/itext.tests/itext.sign.tests/resources/itext/signatures/validation/v1/DocumentRevisionsValidatorIntegrationTest/fullCompressionModeLevel3.pdf new file mode 100644 index 0000000000..83693b25e1 Binary files /dev/null and b/itext.tests/itext.sign.tests/resources/itext/signatures/validation/v1/DocumentRevisionsValidatorIntegrationTest/fullCompressionModeLevel3.pdf differ diff --git a/itext/itext.io/itext/io/util/UrlUtil.cs b/itext/itext.io/itext/io/util/UrlUtil.cs index dfedc03faf..263e8294b0 100644 --- a/itext/itext.io/itext/io/util/UrlUtil.cs +++ b/itext/itext.io/itext/io/util/UrlUtil.cs @@ -89,6 +89,13 @@ public static Uri ToNormalizedURI(FileInfo file) { return new Uri(file.FullName); } + /// Get the entire URI string which is properly encoded. + /// URI which convert to encoded string + /// URI string representation + public static String ToAbsoluteURI(Uri uri) { + return uri.AbsoluteUri; + } + /// /// This method gets uri string from a file. /// diff --git a/itext/itext.kernel/itext/kernel/pdf/action/PdfAction.cs b/itext/itext.kernel/itext/kernel/pdf/action/PdfAction.cs index a7254f9028..3f42681f5a 100644 --- a/itext/itext.kernel/itext/kernel/pdf/action/PdfAction.cs +++ b/itext/itext.kernel/itext/kernel/pdf/action/PdfAction.cs @@ -24,6 +24,7 @@ You should have received a copy of the GNU Affero General Public License using System.Collections.Generic; using Microsoft.Extensions.Logging; using iText.Commons; +using iText.IO.Util; using iText.Kernel.Exceptions; using iText.Kernel.Pdf; using iText.Kernel.Pdf.Annot; @@ -102,6 +103,13 @@ public PdfAction(PdfDictionary pdfObject) MarkObjectAsIndirect(GetPdfObject()); } + /// Creates a GoTo action (section 12.6.4.2 of ISO 32000-1) via a given uri. + /// the uniform resource identifier to resolve + /// created action + public static iText.Kernel.Pdf.Action.PdfAction CreateURI(Uri uri) { + return CreateURI(UrlUtil.ToAbsoluteURI(uri)); + } + /// Creates a GoTo action (section 12.6.4.2 of ISO 32000-1) via a given destination. /// the desired destination of the action /// created action diff --git a/itext/itext.sign/itext/signatures/validation/v1/DocumentRevisionsValidator.cs b/itext/itext.sign/itext/signatures/validation/v1/DocumentRevisionsValidator.cs index 4f4ef1a607..386e70924e 100644 --- a/itext/itext.sign/itext/signatures/validation/v1/DocumentRevisionsValidator.cs +++ b/itext/itext.sign/itext/signatures/validation/v1/DocumentRevisionsValidator.cs @@ -128,6 +128,8 @@ public class DocumentRevisionsValidator { private AccessPermissions requestedAccessPermissions = AccessPermissions.UNSPECIFIED; + private ReportItem.ReportItemStatus unexpectedXrefChangesStatus = ReportItem.ReportItemStatus.INFO; + private ICollection checkedAnnots; private ICollection newlyAddedFields; @@ -184,6 +186,31 @@ public virtual iText.Signatures.Validation.V1.DocumentRevisionsValidator SetAcce return this; } + /// + /// Set the status to be used for the report items produced during docMDP validation in case revision contains + /// unexpected changes in the XREF table. + /// + /// + /// Set the status to be used for the report items produced during docMDP validation in case revision contains + /// unexpected changes in the XREF table. Default value is + /// . + /// + /// + /// + /// + /// to be used in case of unexpected changes in the XREF table + /// + /// + /// the same + /// + /// instance. + /// + public virtual iText.Signatures.Validation.V1.DocumentRevisionsValidator SetUnexpectedXrefChangesStatus(ReportItem.ReportItemStatus + status) { + this.unexpectedXrefChangesStatus = status; + return this; + } + /// Validate all document revisions according to docMDP and fieldMDP transform methods. /// the validation context in which to validate document revisions /// the document to be validated @@ -293,14 +320,14 @@ internal virtual void ValidateRevision(DocumentRevision previousRevision, Docume if (!IsMaxGenerationObject(indirectReference) && referenceWasInPrevDocument && !referenceAllowedToBeRemoved ) { validationReport.AddReportItem(new ReportItem(DOC_MDP_CHECK, MessageFormatUtil.Format(OBJECT_REMOVED, indirectReference - .GetObjNumber()), ReportItem.ReportItemStatus.INVALID)); + .GetObjNumber()), unexpectedXrefChangesStatus)); } } else { if (!CheckAllowedReferences(currentAllowedReferences, previousAllowedReferences, indirectReference, documentWithoutRevision - )) { + ) && !IsAllowedStreamObj(indirectReference, documentWithRevision)) { validationReport.AddReportItem(new ReportItem(DOC_MDP_CHECK, MessageFormatUtil.Format(UNEXPECTED_ENTRY_IN_XREF - , indirectReference.GetObjNumber()), ReportItem.ReportItemStatus.INVALID)); + , indirectReference.GetObjNumber()), unexpectedXrefChangesStatus)); } } } @@ -1376,6 +1403,15 @@ private bool CheckAllowedReferences(ICollection currentAll return false; } + private bool IsAllowedStreamObj(PdfIndirectReference indirectReference, PdfDocument document) { + PdfObject pdfObject = document.GetPdfObject(indirectReference.GetObjNumber()); + if (pdfObject is PdfStream) { + PdfName type = ((PdfStream)pdfObject).GetAsName(PdfName.Type); + return PdfName.XRef.Equals(type) || PdfName.ObjStm.Equals(type); + } + return false; + } + // Allowed references creation nested methods section: private ICollection CreateAllowedDssEntries(PdfDocument document) { ICollection allowedReferences = new HashSet(); diff --git a/port-hash b/port-hash index 613c2a6e33..6cc02440c7 100644 --- a/port-hash +++ b/port-hash @@ -1 +1 @@ -5b45cde6fef8ddbe30aab48043bdbe72c26388b3 +9c895e84106f0b07609f201759e3f1de02714a7f