From 77cbbbf051c078160cf48a49a1161574c9cde04b Mon Sep 17 00:00:00 2001 From: Duncan Ogilvie Date: Sun, 4 Sep 2022 22:30:12 +0200 Subject: [PATCH] Improve escaping in format strings for backwards compatibility --- src/dbg/commandparser.cpp | 41 +++++++++++++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 8 deletions(-) diff --git a/src/dbg/commandparser.cpp b/src/dbg/commandparser.cpp index dfdebe36..240cec44 100644 --- a/src/dbg/commandparser.cpp +++ b/src/dbg/commandparser.cpp @@ -78,6 +78,9 @@ Command::Command(const String & command) case '{': dataAppend(ch); break; + case '\\': + dataAppend(ch); + break; default: dataAppend('\\'); dataAppend(ch); @@ -87,28 +90,50 @@ Command::Command(const String & command) break; case StringFormat: { - dataAppend(ch); auto nextch = i + 1 < len ? command[i + 1] : '\0'; switch(ch) { case '{': if(nextch == '{') { - dataAppend(nextch); - i++; - } - break; - case '}': - if(nextch == '}') - { + dataAppend(ch); dataAppend(nextch); i++; } else { + dataAppend(ch); + } + break; + case '}': + if(nextch == '}') + { + dataAppend(ch); + dataAppend(nextch); + i++; + } + else + { + dataAppend(ch); state = Text; } break; + case '\\': + switch(nextch) + { + case '\"': + case '\\': + dataAppend(nextch); + i++; + break; + default: + dataAppend(ch); + break; + } + break; + default: + dataAppend(ch); + break; } } break;