fixed some bugs for romeo

This commit is contained in:
2026-07-22 17:12:08 -04:00
parent 840db1f804
commit f3747a7581
7 changed files with 177 additions and 33 deletions
+18 -7
View File
@@ -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';