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