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 2022/02/11 15:59:28 UTC

svn commit: r1897979 - in /pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/type1: Type1Lexer.java Type1Parser.java

Author: lehmi
Date: Fri Feb 11 15:59:28 2022
New Revision: 1897979

URL: http://svn.apache.org/viewvc?rev=1897979&view=rev
Log:
PDFBOX-5339: add convenience method to avoid NPE

Modified:
    pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/type1/Type1Lexer.java
    pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/type1/Type1Parser.java

Modified: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/type1/Type1Lexer.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/type1/Type1Lexer.java?rev=1897979&r1=1897978&r2=1897979&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/type1/Type1Lexer.java (original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/type1/Type1Lexer.java Fri Feb 11 15:59:28 2022
@@ -87,6 +87,16 @@ class Type1Lexer
     }
 
     /**
+     * Checks if the kind of the next token equals the given one without consuming it.
+     * 
+     * @return true if the kind of the next token equals the given one
+     */
+    public boolean peekKind(Token.Kind kind)
+    {
+        return aheadToken != null & aheadToken.getKind() == kind;
+    }
+
+    /**
      * Reads an ASCII char from the buffer.
      */
     private char getChar() throws IOException

Modified: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/type1/Type1Parser.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/type1/Type1Parser.java?rev=1897979&r1=1897978&r2=1897979&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/type1/Type1Parser.java (original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/type1/Type1Parser.java Fri Feb 11 15:59:28 2022
@@ -191,7 +191,7 @@ final class Type1Parser
 
     private void readEncoding() throws IOException
     {
-        if (lexer.peekToken().getKind() == Token.NAME)
+        if (lexer.peekKind(Token.NAME))
         {
             String name = lexer.nextToken().getText();
             
@@ -214,16 +214,16 @@ final class Type1Parser
             // 0 1 255 {1 index exch /.notdef put } for
             // we have to check "readonly" and "def" too
             // as some fonts don't provide any dup-values, see PDFBOX-2134
-            while (!(lexer.peekToken().getKind() == Token.NAME &&
-                    (lexer.peekToken().getText().equals("dup") ||
-                    lexer.peekToken().getText().equals("readonly") ||
-                    lexer.peekToken().getText().equals("def"))))
+            while (!(lexer.peekKind(Token.NAME)
+                    && (lexer.peekToken().getText().equals("dup")
+                            || lexer.peekToken().getText().equals("readonly")
+                            || lexer.peekToken().getText().equals("def"))))
             {
                 lexer.nextToken();
             }
             
             Map<Integer, String> codeToName = new HashMap<>();
-            while (lexer.peekToken().getKind() == Token.NAME &&
+            while (lexer.peekKind(Token.NAME) &&
                     lexer.peekToken().getText().equals("dup"))
             {
                 read(Token.NAME, "dup");
@@ -328,7 +328,7 @@ final class Type1Parser
             {
                 break;
             }
-            if (lexer.peekToken().getKind() == Token.NAME &&
+            if (lexer.peekKind(Token.NAME) &&
                !lexer.peekToken().getText().equals("end"))
             {
                 read(Token.NAME);
@@ -338,7 +338,7 @@ final class Type1Parser
             {
                 break;
             }
-            if (lexer.peekToken().getKind() == Token.NAME &&
+            if (lexer.peekKind(Token.NAME) &&
                 lexer.peekToken().getText().equals("end"))
             {
                 break;
@@ -391,7 +391,7 @@ final class Type1Parser
                 {
                     return value;
                 }
-                if (lexer.peekToken().getKind() == Token.START_ARRAY)
+                if (lexer.peekKind(Token.START_ARRAY))
                 {
                     openArray++;
                 }
@@ -471,7 +471,7 @@ final class Type1Parser
                 throw new IOException("Malformed procedure: missing token");
             }
 
-            if (lexer.peekToken().getKind() == Token.START_PROC)
+            if (lexer.peekKind(Token.START_PROC))
             {
                 openProc++;
             }
@@ -509,7 +509,7 @@ final class Type1Parser
             {
                 throw new IOException("Malformed procedure: missing token");
             }
-            if (lexer.peekToken().getKind() == Token.START_PROC)
+            if (lexer.peekKind(Token.START_PROC))
             {
                 openProc++;
             }
@@ -574,7 +574,7 @@ final class Type1Parser
         for (int i = 0; i < length; i++)
         {
             // premature end
-            if (lexer.peekToken() == null || lexer.peekToken().getKind() != Token.LITERAL)
+            if (!lexer.peekKind(Token.LITERAL))
             {
                 break;
             }
@@ -630,8 +630,8 @@ final class Type1Parser
         // some fonts have "2 index" here, others have "end noaccess put"
         // sometimes followed by "put". Either way, we just skip until
         // the /CharStrings dict is found
-        while (!(lexer.peekToken().getKind() == Token.LITERAL &&
-                 lexer.peekToken().getText().equals("CharStrings")))
+        while (!(lexer.peekKind(Token.LITERAL)
+                && lexer.peekToken().getText().equals("CharStrings")))
         {
             lexer.nextToken();
         }
@@ -713,7 +713,7 @@ final class Type1Parser
             {
                 break;
             }
-            if (!(lexer.peekToken().getKind() == Token.NAME &&
+            if (!(lexer.peekKind(Token.NAME) &&
                   lexer.peekToken().getText().equals("dup")))
             {
                 break;
@@ -738,7 +738,7 @@ final class Type1Parser
         {
             throw new IOException("Missing start token of OtherSubrs procedure");
         }
-        if (lexer.peekToken().getKind() == Token.START_ARRAY)
+        if (lexer.peekKind(Token.START_ARRAY))
         {
             readValue();
             readDef();
@@ -779,7 +779,7 @@ final class Type1Parser
             {
                 break;
             }
-            if (lexer.peekToken().getKind() == Token.NAME &&
+            if (lexer.peekKind(Token.NAME) &&
                 lexer.peekToken().getText().equals("end"))
             {
                 break;
@@ -894,8 +894,7 @@ final class Type1Parser
      */
     private Token readMaybe(Token.Kind kind, String name) throws IOException
     {
-        Token token = lexer.peekToken();
-        if (token != null && token.getKind() == kind && token.getText().equals(name))
+        if (lexer.peekKind(kind) && lexer.peekToken().getText().equals(name))
         {
             return lexer.nextToken();
         }