Revert "Debugger: Avoid some temporary containers when parsing escaped chars"

This reverts commit 19ef8e5c7a 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 <eike.ziller@qt.io>
This commit is contained in:
hjk
2022-11-15 12:31:58 +01:00
parent adac83367c
commit e3b84dca1a

View File

@@ -112,7 +112,7 @@ void GdbMi::parseResultOrValue(DebuggerOutputParser &parser)
} }
// Reads one \ooo entity. // Reads one \ooo entity.
static bool parseOctalEscapedHelper(DebuggerOutputParser &parser, QString &buffer) static bool parseOctalEscapedHelper(DebuggerOutputParser &parser, QByteArray &buffer)
{ {
if (parser.remainingChars() < 4) if (parser.remainingChars() < 4)
return false; return false;
@@ -130,7 +130,7 @@ static bool parseOctalEscapedHelper(DebuggerOutputParser &parser, QString &buffe
return true; return true;
} }
static bool parseHexEscapedHelper(DebuggerOutputParser &parser, QString &buffer) static bool parseHexEscapedHelper(DebuggerOutputParser &parser, QByteArray &buffer)
{ {
if (parser.remainingChars() < 4) if (parser.remainingChars() < 4)
return false; return false;
@@ -178,16 +178,15 @@ static void parseSimpleEscape(DebuggerOutputParser &parser, QString &result)
// *or* one escaped char, *or* one unescaped char. // *or* one escaped char, *or* one unescaped char.
static void parseCharOrEscape(DebuggerOutputParser &parser, QString &result) static void parseCharOrEscape(DebuggerOutputParser &parser, QString &result)
{ {
const int oldSize = result.size(); QByteArray buffer;
while (parseOctalEscapedHelper(parser, result)) while (parseOctalEscapedHelper(parser, buffer))
; ;
while (parseHexEscapedHelper(parser, result)) while (parseHexEscapedHelper(parser, buffer))
; ;
if (result.size() != oldSize) if (!buffer.isEmpty()) {
return; result.append(QString::fromUtf8(buffer));
} else if (parser.isCurrent('\\')) {
if (parser.isCurrent('\\')) {
parser.advance(); parser.advance();
parseSimpleEscape(parser, result); parseSimpleEscape(parser, result);
} else { } else {