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;