fixed some bugs for romeo
This commit is contained in:
@@ -431,15 +431,19 @@ namespace Romeo
|
||||
Assert(arena != nullptr);
|
||||
|
||||
size_t escLen = 0;
|
||||
const char* p = CStr(str);
|
||||
const char* end = p + str.Size;
|
||||
const unsigned char* p = reinterpret_cast<const unsigned char*>(CStr(str));
|
||||
const unsigned char* end = p + str.Size;
|
||||
while (p < end)
|
||||
{
|
||||
char c = *p;
|
||||
if (c == '"' || c == '\\' || c == '\n' || c == '\r' || c == '\t')
|
||||
unsigned char c = *p;
|
||||
if (c == '"' || c == '\\' || c == '\n' || c == '\r' || c == '\t' || c == '\b' || c == '\f')
|
||||
{
|
||||
escLen += 2;
|
||||
}
|
||||
else if (c < 32)
|
||||
{
|
||||
escLen += 6;
|
||||
}
|
||||
else
|
||||
{
|
||||
escLen += 1;
|
||||
@@ -449,16 +453,23 @@ namespace Romeo
|
||||
|
||||
char* buf = Juliet::ArenaPushArray<char>(arena, escLen + 1 JULIET_DEBUG_PARAM("JsonEscapedStr"));
|
||||
char* dst = buf;
|
||||
p = CStr(str);
|
||||
p = reinterpret_cast<const unsigned char*>(CStr(str));
|
||||
while (p < end)
|
||||
{
|
||||
char c = *p;
|
||||
unsigned char c = *p;
|
||||
if (c == '"') { *dst++ = '\\'; *dst++ = '"'; }
|
||||
else if (c == '\\') { *dst++ = '\\'; *dst++ = '\\'; }
|
||||
else if (c == '\n') { *dst++ = '\\'; *dst++ = 'n'; }
|
||||
else if (c == '\r') { *dst++ = '\\'; *dst++ = 'r'; }
|
||||
else if (c == '\t') { *dst++ = '\\'; *dst++ = 't'; }
|
||||
else { *dst++ = c; }
|
||||
else if (c == '\b') { *dst++ = '\\'; *dst++ = 'b'; }
|
||||
else if (c == '\f') { *dst++ = '\\'; *dst++ = 'f'; }
|
||||
else if (c < 32)
|
||||
{
|
||||
snprintf(dst, 7, "\\u00%02x", static_cast<unsigned int>(c));
|
||||
dst += 6;
|
||||
}
|
||||
else { *dst++ = static_cast<char>(c); }
|
||||
p++;
|
||||
}
|
||||
*dst = '\0';
|
||||
|
||||
Reference in New Issue
Block a user