You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ca...@apache.org on 2009/05/26 23:24:57 UTC

svn commit: r778891 - /incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java

Author: carrier
Date: Tue May 26 21:24:56 2009
New Revision: 778891

URL: http://svn.apache.org/viewvc?rev=778891&view=rev
Log:
Patch for PDFBOX-418 that better parses number tokens.  Patch by Timo Boehme.

Modified:
    incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java

Modified: incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java
URL: http://svn.apache.org/viewvc/incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java?rev=778891&r1=778890&r2=778891&view=diff
==============================================================================
--- incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java (original)
+++ incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java Tue May 26 21:24:56 2009
@@ -235,21 +235,22 @@
             case '+':
             case '.':
             {
-                if( Character.isDigit(c) || c == '-' || c == '+' || c == '.')
-                {
-                    StringBuffer buf = new StringBuffer();
-                    while( Character.isDigit(( c = (char)pdfSource.peek()) )|| c== '-' || c== '+' || c =='.' )
-                    {
-                        buf.append( c );
-                        pdfSource.read();
-                    }
-                    retval = COSNumber.get( buf.toString() );
-                }
-                else
+                /* We will be filling buf with the rest of the number.  Only
+                 * allow 1 "." and "-" and "+" at start of number. */
+                StringBuffer buf = new StringBuffer();
+                buf.append( c );
+                pdfSource.read();
+
+                boolean dotNotRead = (c != '.');
+                while( Character.isDigit(( c = (char)pdfSource.peek()) ) || (dotNotRead && (c == '.')) )
                 {
-                    throw new IOException( "Unknown dir object c='" + c +
-                        "' peek='" + (char)pdfSource.peek() + "' " + pdfSource );
+                    buf.append( c );
+                    pdfSource.read();
+
+                    if (dotNotRead && (c == '.'))
+                        dotNotRead = false;
                 }
+                retval = COSNumber.get( buf.toString() );
                 break;
             }
             case 'B':