diff --git a/itext.tests/itext.pdfa.tests/itext/pdfa/PdfAXmpTest.cs b/itext.tests/itext.pdfa.tests/itext/pdfa/PdfAXmpTest.cs index f14b18e9c..da4ad5c55 100644 --- a/itext.tests/itext.pdfa.tests/itext/pdfa/PdfAXmpTest.cs +++ b/itext.tests/itext.pdfa.tests/itext/pdfa/PdfAXmpTest.cs @@ -29,6 +29,7 @@ using iText.Kernel.Utils; using iText.Kernel.XMP; using iText.Kernel.XMP.Options; using iText.Test; +using iText.Test.Attributes; namespace iText.Pdfa { [NUnit.Framework.Category("IntegrationTest")] @@ -112,6 +113,34 @@ namespace iText.Pdfa { } } + [NUnit.Framework.Test] + public virtual void ReadDocumentWithControlCharactersInXMPMetadata() { + String src = sourceFolder + "pdfs/docWithControlCharactersInXmp.pdf"; + using (PdfADocument document = new PdfADocument(new PdfReader(src), new PdfWriter(new MemoryStream()), new + StampingProperties())) { + NUnit.Framework.Assert.AreEqual(PdfConformance.PDF_A_3A, document.GetConformance()); + } + } + + [NUnit.Framework.Test] + public virtual void ReadDocumentWithInvalidConformance() { + String src = sourceFolder + "pdfs/docWithInvalidConformance.pdf"; + using (PdfDocument document = new PdfDocument(new PdfReader(src), new PdfWriter(new MemoryStream()), new StampingProperties + ())) { + NUnit.Framework.Assert.AreEqual(PdfConformance.PDF_NONE_CONFORMANCE, document.GetConformance()); + } + } + + [LogMessage(iText.IO.Logs.IoLogMessageConstant.EXCEPTION_WHILE_UPDATING_XMPMETADATA)] + [NUnit.Framework.Test] + public virtual void ReadDocumentWithInvalidXMPMetadata() { + String src = sourceFolder + "pdfs/docWithInvalidMetadata.pdf"; + using (PdfDocument document = new PdfDocument(new PdfReader(src), new PdfWriter(new MemoryStream()), new StampingProperties + ())) { + NUnit.Framework.Assert.AreEqual(PdfConformance.PDF_NONE_CONFORMANCE, document.GetConformance()); + } + } + [NUnit.Framework.Test] public virtual void TestPdfUAExtensionMetadata() { String outFile = destinationFolder + "testPdfUAExtensionMetadata.pdf"; diff --git a/itext.tests/itext.pdfa.tests/resources/itext/pdfa/pdfs/docWithControlCharactersInXmp.pdf b/itext.tests/itext.pdfa.tests/resources/itext/pdfa/pdfs/docWithControlCharactersInXmp.pdf new file mode 100644 index 000000000..ab14374ea --- /dev/null +++ b/itext.tests/itext.pdfa.tests/resources/itext/pdfa/pdfs/docWithControlCharactersInXmp.pdf @@ -0,0 +1,2 @@ +Page 1 + \ No newline at end of file diff --git a/itext.tests/itext.pdfa.tests/resources/itext/pdfa/pdfs/docWithInvalidConformance.pdf b/itext.tests/itext.pdfa.tests/resources/itext/pdfa/pdfs/docWithInvalidConformance.pdf new file mode 100644 index 000000000..7cc6c0c28 --- /dev/null +++ b/itext.tests/itext.pdfa.tests/resources/itext/pdfa/pdfs/docWithInvalidConformance.pdf @@ -0,0 +1,2 @@ +Page 1 + \ No newline at end of file diff --git a/itext.tests/itext.pdfa.tests/resources/itext/pdfa/pdfs/docWithInvalidMetadata.pdf b/itext.tests/itext.pdfa.tests/resources/itext/pdfa/pdfs/docWithInvalidMetadata.pdf new file mode 100644 index 000000000..8b4396bc4 --- /dev/null +++ b/itext.tests/itext.pdfa.tests/resources/itext/pdfa/pdfs/docWithInvalidMetadata.pdf @@ -0,0 +1,2 @@ +Page 1 + \ No newline at end of file diff --git a/itext/itext.commons/itext/commons/utils/PushbackReader.cs b/itext/itext.commons/itext/commons/utils/PushbackReader.cs index f6fa92f7f..2eb0708c8 100644 --- a/itext/itext.commons/itext/commons/utils/PushbackReader.cs +++ b/itext/itext.commons/itext/commons/utils/PushbackReader.cs @@ -75,7 +75,7 @@ namespace iText.Commons.Utils { /// Offset at which to start writing characters /// Maximum number of characters to read /// - /// The number of characters read, or -1 if the end of the + /// The number of characters read, or 0 if the end of the /// stream has been reached /// public override int Read(char[] cbuf, int off, int len) { diff --git a/itext/itext.kernel/itext/kernel/pdf/PdfReader.cs b/itext/itext.kernel/itext/kernel/pdf/PdfReader.cs index 71d87757e..c0debae43 100644 --- a/itext/itext.kernel/itext/kernel/pdf/PdfReader.cs +++ b/itext/itext.kernel/itext/kernel/pdf/PdfReader.cs @@ -674,6 +674,7 @@ namespace iText.Kernel.Pdf { pdfConformance = PdfConformance.GetConformance(xmpMeta); } catch (XMPException) { + pdfConformance = PdfConformance.PDF_NONE_CONFORMANCE; } } return pdfConformance; diff --git a/itext/itext.kernel/itext/kernel/xmp/impl/FixASCIIControlsReader.cs b/itext/itext.kernel/itext/kernel/xmp/impl/FixASCIIControlsReader.cs index a6d8ea31e..e53ec7005 100644 --- a/itext/itext.kernel/itext/kernel/xmp/impl/FixASCIIControlsReader.cs +++ b/itext/itext.kernel/itext/kernel/xmp/impl/FixASCIIControlsReader.cs @@ -103,7 +103,7 @@ namespace iText.Kernel.XMP.Impl { } } } - return read > 0 || available ? read : -1; + return read > 0 || available ? read : XMPUtilsImpl.EofReadBytesValue(); } /// Processes numeric escaped chars to find out if they are a control character. diff --git a/itext/itext.kernel/itext/kernel/xmp/impl/XMPUtilsImpl.cs b/itext/itext.kernel/itext/kernel/xmp/impl/XMPUtilsImpl.cs index 47ca0ee04..d2aa534d3 100644 --- a/itext/itext.kernel/itext/kernel/xmp/impl/XMPUtilsImpl.cs +++ b/itext/itext.kernel/itext/kernel/xmp/impl/XMPUtilsImpl.cs @@ -57,6 +57,17 @@ namespace iText.Kernel.XMP.Impl { } + /// + /// Return value when eof encountered of . + /// + /// + /// platform dependent eof read value (0 for C#) + /// + public static int EofReadBytesValue() + { + return 0; + } + // EMPTY /// diff --git a/port-hash b/port-hash index fae047547..ee18b7ad9 100644 --- a/port-hash +++ b/port-hash @@ -1 +1 @@ -6691f70abaf4119ab2e862f6b708e46bb3e76666 +3ccc99bd8391813f729cf2b6c656252687f17629