de6f2a8d4efeafe720d96170be9739bf29280e75
larrym
  Wed Apr 18 17:24:19 2012 -0700
yet more tweaking to JSON string escape code
diff --git src/hg/lib/jsHelper.c src/hg/lib/jsHelper.c
index d4c56f8..32b0d9b 100644
--- src/hg/lib/jsHelper.c
+++ src/hg/lib/jsHelper.c
@@ -762,41 +762,55 @@
 static char *getString(char *str, int *posPtr)
 {
 // read a double-quote delimited string; we handle backslash escaping.
 // returns allocated string.
 boolean escapeMode = FALSE;
 int i;
 struct dyString *ds = dyStringNew(1024);
 getSpecificChar('"', str, posPtr);
 for(i = 0;; i++)
     {
     char c = str[*posPtr + i];
     if(!c)
         errAbort("Premature end of string (missing trailing double-quote); string position '%d'", *posPtr);
     else if(escapeMode)
         {
+        // We support escape sequences listed in https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/JSON
+        // except for Unicode which we cannot support in C-strings
         switch(c)
             {
+            case 'b':
+                c = '\b';
+                break;
+            case 'f':
+                c = '\f';
+                break;
             case 'n':
                 c = '\n';
                 break;
             case 'r':
                 c = '\r';
                 break;
             case 't':
                 c = '\t';
                 break;
+            case 'u':
+                errAbort("Unicode in JSON is unsupported");
+                break;
+            default:
+                // we don't need to convert \,/ or "
+                break;
             }
         dyStringAppendC(ds, c);
         escapeMode = FALSE;
         }
     else if(c == '"')
         break;
     else if(c == '\\')
         escapeMode = TRUE;
     else
         {
         dyStringAppendC(ds, c);
         escapeMode = FALSE;
         }
     }
 *posPtr += i;