From e3b84dca1a29414d0902999745089717ad3d45ed Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 15 Nov 2022 12:31:58 +0100 Subject: [PATCH] Revert "Debugger: Avoid some temporary containers when parsing escaped chars" This reverts commit 19ef8e5c7a5348e4b47feed09cefcc2b4651be32 which introduced the following regression: FAIL! : tst_protocol::parseCString(octal) Compared values are not the same Actual (parsed) : "abc\u00C3\u00A4\u00C3\u00A9def\u00C3\u00B1" Expected (expected): "abc\u00E4\u00E9def\u00F1" Loc: [/data/dev/creator-out/tests/auto/debugger/tst_protocol.cpp(32)] FAIL! : tst_protocol::parseCString(hex) Compared values are not the same Actual (parsed) : "abc\u00C3\u00A4\u00C3\u00A9def\u00C3\u00B1" Expected (expected): "abc\u00E4\u00E9def\u00F1" Loc: [/data/dev/creator-out/tests/auto/debugger/tst_protocol.cpp(32)] Change-Id: I59509fd61a54c335ab0a34f8ca0dffb3d75da696 Reviewed-by: Eike Ziller --- src/plugins/debugger/debuggerprotocol.cpp | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/plugins/debugger/debuggerprotocol.cpp b/src/plugins/debugger/debuggerprotocol.cpp index 9aebe53f343..0bf60c3a4f5 100644 --- a/src/plugins/debugger/debuggerprotocol.cpp +++ b/src/plugins/debugger/debuggerprotocol.cpp @@ -112,7 +112,7 @@ void GdbMi::parseResultOrValue(DebuggerOutputParser &parser) } // Reads one \ooo entity. -static bool parseOctalEscapedHelper(DebuggerOutputParser &parser, QString &buffer) +static bool parseOctalEscapedHelper(DebuggerOutputParser &parser, QByteArray &buffer) { if (parser.remainingChars() < 4) return false; @@ -130,7 +130,7 @@ static bool parseOctalEscapedHelper(DebuggerOutputParser &parser, QString &buffe return true; } -static bool parseHexEscapedHelper(DebuggerOutputParser &parser, QString &buffer) +static bool parseHexEscapedHelper(DebuggerOutputParser &parser, QByteArray &buffer) { if (parser.remainingChars() < 4) return false; @@ -178,16 +178,15 @@ static void parseSimpleEscape(DebuggerOutputParser &parser, QString &result) // *or* one escaped char, *or* one unescaped char. static void parseCharOrEscape(DebuggerOutputParser &parser, QString &result) { - const int oldSize = result.size(); - while (parseOctalEscapedHelper(parser, result)) + QByteArray buffer; + while (parseOctalEscapedHelper(parser, buffer)) ; - while (parseHexEscapedHelper(parser, result)) + while (parseHexEscapedHelper(parser, buffer)) ; - if (result.size() != oldSize) - return; - - if (parser.isCurrent('\\')) { + if (!buffer.isEmpty()) { + result.append(QString::fromUtf8(buffer)); + } else if (parser.isCurrent('\\')) { parser.advance(); parseSimpleEscape(parser, result); } else {