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':