You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@labs.apache.org by yo...@apache.org on 2006/12/04 06:21:34 UTC

svn commit: r482082 - /labs/noggit/src/main/java/org/apache/noggit/JSONParser.java

Author: yonik
Date: Sun Dec  3 21:21:33 2006
New Revision: 482082

URL: http://svn.apache.org/viewvc?view=rev&rev=482082
Log:
fix string escape decoding

Modified:
    labs/noggit/src/main/java/org/apache/noggit/JSONParser.java

Modified: labs/noggit/src/main/java/org/apache/noggit/JSONParser.java
URL: http://svn.apache.org/viewvc/labs/noggit/src/main/java/org/apache/noggit/JSONParser.java?view=diff&rev=482082&r1=482081&r2=482082
==============================================================================
--- labs/noggit/src/main/java/org/apache/noggit/JSONParser.java (original)
+++ labs/noggit/src/main/java/org/apache/noggit/JSONParser.java Sun Dec  3 21:21:33 2006
@@ -351,9 +351,9 @@
     if (hexdig>='0' && hexdig <='9') {
       return hexdig-'0';
     } else if (hexdig>='A' && hexdig <='F') {
-      return hexdig-'A';
+      return hexdig+(10-'A');
     } else if (hexdig>='a' && hexdig <='f') {
-      return hexdig-'a';
+      return hexdig+(10-'a');
     }
     throw err("invalid hex digit");
   }
@@ -361,13 +361,14 @@
   // backslash has already been read when this is called
   private char readEscapedChar() throws IOException {
     switch (getChar()) {
+      case '"' : return '"';
       case '\\' : return '\\';
       case '/' : return '/';
-      case '\n' : return '\n';
-      case '\r' : return '\r';
-      case '\t' : return '\t';
-      case '\f' : return '\f';
-      case '\b' : return '\b';
+      case 'n' : return '\n';
+      case 'r' : return '\r';
+      case 't' : return '\t';
+      case 'f' : return '\f';
+      case 'b' : return '\b';
       case 'u' :
         return (char)(
                (hexval(getChar()) << 12)
@@ -412,13 +413,16 @@
       }
       int ch = buf[middle++];
       if (ch=='"') {
-        arr.write(buf,start,middle-start-1);
+        int len = middle-start-1;        
+        if (len>0) arr.write(buf,start,len);
         start=middle;
         return;
       } else if (ch=='\\') {
-        arr.write(buf,start,middle-start-1);
+        int len = middle-start-1;
+        if (len>0) arr.write(buf,start,len);
         start=middle;
         arr.write(readEscapedChar());
+        middle=start;
       }
     }
   }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org