diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_funcs.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_funcs.cpp index 1da071392..14e8a2233 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_funcs.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_funcs.cpp @@ -437,7 +437,7 @@ bool w_swtchSrc(const YamlNode* node, uint32_t val, yaml_writer_func wf, void* o { int32_t sval = yaml_to_signed(val, node->size); if (sval < 0) { - wf(opaque, "!", 1); + wf(opaque, "\\!", 2); sval = abs(sval); } diff --git a/radio/src/storage/yaml/yaml_datastructs_funcs.cpp b/radio/src/storage/yaml/yaml_datastructs_funcs.cpp index 2bd1e8fbe..e971a3f3b 100644 --- a/radio/src/storage/yaml/yaml_datastructs_funcs.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_funcs.cpp @@ -763,7 +763,7 @@ static bool w_swtchSrc(const YamlNode* node, uint32_t val, yaml_writer_func wf, { int32_t sval = yaml_to_signed(val, node->size); if (sval < 0) { - wf(opaque, "!", 1); + wf(opaque, "\\!", 2); sval = abs(sval); } diff --git a/radio/src/storage/yaml/yaml_parser.cpp b/radio/src/storage/yaml/yaml_parser.cpp index 220f9cd4e..861e63c69 100644 --- a/radio/src/storage/yaml/yaml_parser.cpp +++ b/radio/src/storage/yaml/yaml_parser.cpp @@ -213,6 +213,10 @@ YamlParser::parse(const char* buffer, unsigned int size) state = ps_ValQuo; break; } + if (*c == '\\') { + state = ps_ValEsc; + break; + } CONCAT_STR(scratch_buf, scratch_len, *c); break; @@ -284,6 +288,15 @@ YamlParser::parse(const char* buffer, unsigned int size) state = ps_ValQuo; break; } + if (*c == '\\') { + state = ps_ValEsc; + break; + } + CONCAT_STR(scratch_buf, scratch_len, *c); + break; + + case ps_ValEsc: + state = ps_Val; CONCAT_STR(scratch_buf, scratch_len, *c); break; diff --git a/radio/src/storage/yaml/yaml_parser.h b/radio/src/storage/yaml/yaml_parser.h index b3b32d1dc..bc62dbe7d 100644 --- a/radio/src/storage/yaml/yaml_parser.h +++ b/radio/src/storage/yaml/yaml_parser.h @@ -46,6 +46,7 @@ class YamlParser ps_AttrSP, ps_Sep, ps_Val, + ps_ValEsc, ps_ValQuo, ps_ValEsc1, ps_ValEsc2,