reformatCharacter: int to QChar conversion segfault

Debugger, watchhandler: incorrect type conversion:
Converting from `int` to `unsigned int` can lead to a situation where
the result is too large to be represented as a `QChar`.

Task-number: QTCREATORBUG-27107
Change-Id: I7873635f7a1ef29f62339ffe23b4dd84cb089e2b
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Evgeny Shtanov
2022-05-24 18:08:30 +03:00
parent 49bb40f19e
commit 3b373eecd4

View File

@@ -663,7 +663,14 @@ static QString reformatInteger(quint64 value, int format, int size, bool isSigne
// Format printable (char-type) characters // Format printable (char-type) characters
static QString reformatCharacter(int code, int size, bool isSigned) static QString reformatCharacter(int code, int size, bool isSigned)
{ {
const QChar c = QChar(uint(code)); QChar c;
switch (size) {
case 1: c = QChar(uchar(code)); break;
case 2: c = QChar(uint16_t(code)); break;
case 4: c = QChar(uint32_t(code)); break;
default: c = QChar(uint(code)); break;
}
QString out; QString out;
if (c.isPrint()) if (c.isPrint())
out = QString("'") + c + "' "; out = QString("'") + c + "' ";