in AzureSphereSquirrel/HLCore/json.cpp [232:329]
SQInteger JSON::parseString(HSQUIRRELVM vm, char *jsonString, jsmntok_t tokens[], unsigned int tokenIndex)
{
jsmntok_t *token = &tokens[tokenIndex];
char *string = &jsonString[token->start];
int stringLen = token->end - token->start;
int finalStringLen = stringLen;
for(int i = 0; i < stringLen-1; ++i)
{
if(string[i] == '\\')
{
switch(string[i+1])
{
case '"': case '\\': case '/':
string[i] = 255;
--finalStringLen;
++i;
break;
case 'b':
string[i] = 255;
string[i+1] = '\b';
--finalStringLen;
++i;
break;
case 'f':
string[i] = 255;
string[i+1] = '\f';
--finalStringLen;
++i;
break;
case 'n':
string[i] = 255;
string[i+1] = '\n';
--finalStringLen;
++i;
break;
case 'r':
string[i] = 255;
string[i+1] = '\r';
--finalStringLen;
++i;
break;
case 't':
string[i] = 255;
string[i+1] = '\t';
--finalStringLen;
++i;
break;
case 'u':
unsigned int byteCode;
if(stringLen - i == 6)
{
byteCode = strtol(&string[i+2], nullptr, 16);
}
else if(stringLen - i > 6)
{
char tempChar = string[i+6];
string[i+6] = '\0';
byteCode = strtol(&string[i+2], nullptr, 16);
string[i+6] = tempChar;
}
else
{
return sq_throwerror(vm, "Unable to parse string token \\u");
}
if(byteCode >= 256)
{
return sq_throwerror(vm, "Unable to parse string token \\u, sizes above 1Byte not yet supported");
}
string[i] = 255;
string[i+1] = byteCode;
string[i+2] = 255;
string[i+3] = 255;
string[i+4] = 255;
string[i+5] = 255;
finalStringLen -= 5;
break;
default: return sq_throwerror(vm, "Unable to parse string token, unknown escape sequence");;
}
}
}
for(int i = 0, u = 0; i < stringLen; ++i)
{
if(string[i] == 255)
{
continue;
}
string[u++] = string[i];
}
sq_pushstring(vm, string, finalStringLen);
return SQ_OK;
}