You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by le...@apache.org on 2019/06/23 13:22:56 UTC

svn commit: r1861928 - in /pdfbox/branches/2.0: ./ preflight/src/main/java/org/apache/pdfbox/preflight/process/StreamValidationProcess.java

Author: lehmi
Date: Sun Jun 23 13:22:56 2019
New Revision: 1861928

URL: http://svn.apache.org/viewvc?rev=1861928&view=rev
Log:
PDFBOX-4578: fixed/overhauled EOL detection, fixed misspelled keyword

Modified:
    pdfbox/branches/2.0/   (props changed)
    pdfbox/branches/2.0/preflight/src/main/java/org/apache/pdfbox/preflight/process/StreamValidationProcess.java

Propchange: pdfbox/branches/2.0/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sun Jun 23 13:22:56 2019
@@ -1,4 +1,4 @@
 /pdfbox/branches/issue4569:1861285,1861586
 /pdfbox/branches/no-awt:1618517-1621410
 /pdfbox/no-awt:1618514-1618516
-/pdfbox/trunk:1736223,1736227,1736615,1737043,1737130,1737599-1737600,1738755,1740160,1742437,1742442,1743248,1745595,1745606,1745772,1745774,1745776,1745779,1746032,1746151,1749162,1749165,1749432,1766088,1766213,1767585,1768061,1770985,1770988,1772528,1778172,1782679,1786586,1786603,1787546,1789414,1790745,1794073,1794090,1794620,1794753,1794859,1794891,1800566,1812426,1814226,1826836,1857800,1857803,1857914
+/pdfbox/trunk:1736223,1736227,1736615,1737043,1737130,1737599-1737600,1738755,1740160,1742437,1742442,1743248,1745595,1745606,1745772,1745774,1745776,1745779,1746032,1746151,1749162,1749165,1749432,1766088,1766213,1767585,1768061,1770985,1770988,1772528,1778172,1782679,1786586,1786603,1787546,1789414,1790745,1794073,1794090,1794620,1794753,1794859,1794891,1800566,1812426,1814226,1826836,1857800,1857803,1857914,1861927

Modified: pdfbox/branches/2.0/preflight/src/main/java/org/apache/pdfbox/preflight/process/StreamValidationProcess.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/preflight/src/main/java/org/apache/pdfbox/preflight/process/StreamValidationProcess.java?rev=1861928&r1=1861927&r2=1861928&view=diff
==============================================================================
--- pdfbox/branches/2.0/preflight/src/main/java/org/apache/pdfbox/preflight/process/StreamValidationProcess.java (original)
+++ pdfbox/branches/2.0/preflight/src/main/java/org/apache/pdfbox/preflight/process/StreamValidationProcess.java Sun Jun 23 13:22:56 2019
@@ -50,6 +50,8 @@ import org.apache.pdfbox.util.Charsets;
 public class StreamValidationProcess extends AbstractProcess
 {
 
+    private static final String ENDSTREAM = "endstream";
+
     @Override
     public void validate(PreflightContext ctx) throws ValidationException
     {
@@ -226,12 +228,17 @@ public class StreamValidationProcess ext
                 if (readUntilStream(ra))
                 {
                     int c = ra.read();
-                    if (c == '\r')
+                    // "stream" has to be followed by a LF or CRLF
+                    if (c != '\r' && c != '\n')
                     {
-                        ra.read();
+                        addStreamLengthValidationError(context, cObj, length, "");
+                        return;
+                    }
+                    if (c == '\r' && ra.read() != '\n')
+                    {
+                        addStreamLengthValidationError(context, cObj, length, "");
+                        return;
                     }
-                    // else c is '\n' no more character to read
-
                     // ---- Here is the true beginning of the Stream Content.
                     // ---- Read the given length of bytes and check the 10 next bytes
                     // ---- to see if there are endstream.
@@ -261,42 +268,19 @@ public class StreamValidationProcess ext
                     }
                     while (nbBytesToRead > 0);
 
-                    int len = "endstream".length() + 2;
+                    int len = ENDSTREAM.length() + 2;
                     byte[] buffer2 = new byte[len];
-                    for (int i = 0; i < len; ++i)
-                    {
-                        buffer2[i] = (byte) ra.read();
-                    }
+                    ra.read(buffer2);
 
                     // ---- check the content of 10 last characters
+                    // there has to be an proceeding EOL (LF or CRLF)
                     String endStream = new String(buffer2, Charsets.ISO_8859_1);
-                    if (buffer2[0] == '\r' && buffer2[1] == '\n')
-                    {
-                        if (!endStream.contains("endstream"))
-                        {
-                            addStreamLengthValidationError(context, cObj, length, endStream);
-                        }
-                    }
-                    else if (buffer2[0] == '\r' && buffer2[1] == 'e')
-                    {
-                        if (!endStream.contains("endstream"))
-                        {
-                            addStreamLengthValidationError(context, cObj, length, endStream);
-                        }
-                    }
-                    else if (buffer2[0] == '\n' && buffer2[1] == 'e')
+                    if ((buffer2[0] != '\r' && buffer2[0] != '\n') //
+                            || (buffer2[0] == '\r' && buffer2[1] != '\n') //
+                            || (buffer2[0] == '\n' && buffer2[1] != 'e') //
+                            || !endStream.contains(ENDSTREAM))
                     {
-                        if (!endStream.contains("endstream"))
-                        {
-                            addStreamLengthValidationError(context, cObj, length, endStream);
-                        }
-                    }
-                    else
-                    {
-                        if (!endStream.startsWith("endStream"))
-                        {
-                             addStreamLengthValidationError(context, cObj, length, endStream);
-                        }
+                        addStreamLengthValidationError(context, cObj, length, endStream);
                     }
                 }
                 else