Skip to content

Commit

Permalink
fix(zscript): escape character \" not working properly in string lite…
Browse files Browse the repository at this point in the history
…rals
  • Loading branch information
EmilyV99 authored and connorjclark committed Dec 23, 2023
1 parent 1b0d63b commit a08d4a1
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 20 deletions.
30 changes: 14 additions & 16 deletions src/base/util.cpp
Expand Up @@ -624,27 +624,25 @@ namespace util
for(size_t q = 0; q < len; ++q)
{
char c = str[q];
if(c < ' ' || c > '~')
switch(c)
{
switch(c)
case '\n': oss << "\\n"; break;
case '\t': oss << "\\t"; break;
case '\a': oss << "\\a"; break;
case '\b': oss << "\\b"; break;
case '\f': oss << "\\f"; break;
case '\r': oss << "\\r"; break;
case '\v': oss << "\\v"; break;
case '"': oss << "\\\""; break;
case '\\': oss << "\\\\"; break;
default:
{
case '\n': oss << "\\n"; break;
case '\t': oss << "\\t"; break;
case '\a': oss << "\\a"; break;
case '\b': oss << "\\b"; break;
case '\f': oss << "\\f"; break;
case '\r': oss << "\\r"; break;
case '\v': oss << "\\v"; break;
case '"': oss << "\\\""; break;
case '\\': oss << "\\\\"; break;
default:
{
if(c < ' ' || c > '~')
oss << "\\x" << std::setfill('0') << std::setw(2) << std::hex << (int32_t(c)&0xFF);
break;
}
else oss << c;
break;
}
}
else oss << c;
}
oss << "\"";
return oss.str();
Expand Down
17 changes: 13 additions & 4 deletions src/zq/ffasm.cpp
Expand Up @@ -3041,9 +3041,12 @@ int32_t parse_script_file(script_data **script, FILE* fscript, bool report_succe
{
bool vec = c == '{';
auto j = buffer.size()-1;
bool bslash = false;
while(true)
{
char c2 = fgetc(fscript);
bslash = c2 == '\\';

if(feof(fscript))
{
stop=true;
Expand All @@ -3066,7 +3069,7 @@ int32_t parse_script_file(script_data **script, FILE* fscript, bool report_succe
}
else
{
if(c2 == '"')
if(!bslash && c2 == '"')
{
size_t sz = escstr_size(buffer.c_str()+j);
if(sz)
Expand Down Expand Up @@ -3207,9 +3210,11 @@ int32_t parse_script_file(script_data **script, FILE* fscript, bool report_succe
{
bool vec = c == '{';
auto j = buffer.size()-1;
bool bslash = false;
while(true)
{
char c2 = fgetc(fscript);
bslash = c2 == '\\';
if(feof(fscript))
{
stop=true;
Expand All @@ -3232,7 +3237,7 @@ int32_t parse_script_file(script_data **script, FILE* fscript, bool report_succe
}
else
{
if(c2 == '"')
if(!bslash && c2 == '"')
{
size_t sz = escstr_size(buffer.c_str()+j);
if(sz)
Expand Down Expand Up @@ -3523,9 +3528,11 @@ int32_t parse_script_string(script_data **script, std::string const& scriptstr,
{
bool vec = c == '{';
auto j = buffer.size()-1;
bool bslash = false;
while(true)
{
char c2 = *scrptr++;
bslash = c2 == '\\';
if(!c2) //null terminator
{
stop=true;
Expand All @@ -3548,7 +3555,7 @@ int32_t parse_script_string(script_data **script, std::string const& scriptstr,
}
else
{
if(c2 == '"')
if(!bslash && c2 == '"')
{
size_t sz = escstr_size(buffer.c_str()+j);
if(sz)
Expand Down Expand Up @@ -3693,9 +3700,11 @@ int32_t parse_script_string(script_data **script, std::string const& scriptstr,
{
bool vec = c == '{';
auto j = buffer.size()-1;
bool bslash = false;
while(true)
{
char c2 = *scrptr++;
bslash = c2 == '\\';
if(!c2) //null terminator
{
stop=true;
Expand All @@ -3718,7 +3727,7 @@ int32_t parse_script_string(script_data **script, std::string const& scriptstr,
}
else
{
if(c2 == '"')
if(!bslash && c2 == '"')
{
size_t sz = escstr_size(buffer.c_str()+j);
if(sz)
Expand Down

0 comments on commit a08d4a1

Please sign in to comment.