[poppler] poppler/Lexer.cc

Albert Astals Cid aacid at kemper.freedesktop.org
Thu Feb 7 14:39:04 PST 2008


 poppler/Lexer.cc |   25 +++++++++++++++++++++----
 1 file changed, 21 insertions(+), 4 deletions(-)

New commits:
commit 22d10c19e232dea143bda372c92aa12b999e4921
Author: Albert Astals Cid <aacid at kde.org>
Date:   Thu Feb 7 23:38:50 2008 +0100

    PDF spec says name tokens have a maximum length of 127, but there are some docs in the wild with more than that and they work on acroread so increase the allowed length to 128+127

diff --git a/poppler/Lexer.cc b/poppler/Lexer.cc
index 270c135..09a3f13 100644
--- a/poppler/Lexer.cc
+++ b/poppler/Lexer.cc
@@ -348,6 +348,7 @@ Object *Lexer::getObj(Object *obj, int objNum) {
   case '/':
     p = tokBuf;
     n = 0;
+    s = NULL;
     while ((c = lookChar()) != EOF && !specialChars[c]) {
       getChar();
       if (c == '#') {
@@ -375,14 +376,30 @@ Object *Lexer::getObj(Object *obj, int objNum) {
 	}
       }
      notEscChar:
-      if (++n == tokBufSize) {
-	error(getPos(), "Name token too long");
-	break;
+      if (n == tokBufSize) {
+	if (!s)
+	{
+	  error(getPos(), "Warning: name token is longer than what the specification says it can be");
+	  s = new GooString(tokBuf, tokBufSize);
+	}
+	else
+	{
+	  // the spec says 127 is the maximum, we are already at 256 so bail out
+	  error(getPos(), "Name token too long");
+	  break;
+	}
+	p = tokBuf;
+	n = 0;
       }
       *p++ = c;
+      ++n;
     }
     *p = '\0';
-    obj->initName(tokBuf);
+    if (s) {
+      s->append(tokBuf, n);
+      obj->initName(s->getCString());
+      delete s;
+    } else obj->initName(tokBuf);
     break;
 
   // array punctuation


More information about the poppler mailing list