From c9b8c2cddbd41c0c80bf46ad587ebb9a342255da Mon Sep 17 00:00:00 2001 From: Giuseppe D'Angelo Date: Thu, 5 Nov 2020 17:11:46 +0100 Subject: QLineEdit: check a int->QChar conversion, and make it explicit QStyle::styleHint returns int, and that int was simply used to build a QChar representing the "password mask" character. Enforce that it actually fits and then do an explicit cast. (In general, of course, this is an API flaw; styleHint should somehow return a QString for this use case). Change-Id: Ifb6181b229b91cc84859cb9b9d57e21d6748c31a Reviewed-by: Thiago Macieira Reviewed-by: David Faure --- tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp index e4bf36efaa..6df217d801 100644 --- a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp +++ b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp @@ -1679,7 +1679,9 @@ void tst_QLineEdit::displayText_data() m << bool(use_setText); s = key_mode_str + "Password"; m = QLineEdit::Password; - QChar passChar = qApp->style()->styleHint(QStyle::SH_LineEdit_PasswordCharacter, 0, m_testWidget); + const int passwordCharacter = qApp->style()->styleHint(QStyle::SH_LineEdit_PasswordCharacter, 0, m_testWidget); + QVERIFY(passwordCharacter <= 0xFFFF); + const QChar passChar(passwordCharacter); QString input; QString pass; input = "Hello World"; @@ -1725,7 +1727,9 @@ void tst_QLineEdit::passwordEchoOnEdit() QStyleOptionFrame opt; QLineEdit *testWidget = ensureTestWidget(); - QChar fillChar = testWidget->style()->styleHint(QStyle::SH_LineEdit_PasswordCharacter, &opt, testWidget); + const int passwordCharacter = testWidget->style()->styleHint(QStyle::SH_LineEdit_PasswordCharacter, &opt, testWidget); + QVERIFY(passwordCharacter <= 0xFFFF); + const QChar fillChar(passwordCharacter); testWidget->setEchoMode(QLineEdit::PasswordEchoOnEdit); testWidget->setFocus(); @@ -1772,7 +1776,9 @@ void tst_QLineEdit::passwordEchoDelay() QSKIP("Platform not defining echo delay and overriding only possible in internal build"); QStyleOptionFrame opt; - QChar fillChar = testWidget->style()->styleHint(QStyle::SH_LineEdit_PasswordCharacter, &opt, testWidget); + const int passwordCharacter = testWidget->style()->styleHint(QStyle::SH_LineEdit_PasswordCharacter, &opt, testWidget); + QVERIFY(passwordCharacter <= 0xFFFF); + const QChar fillChar(passwordCharacter); testWidget->setEchoMode(QLineEdit::Password); testWidget->setFocus(); @@ -3917,7 +3923,9 @@ void tst_QLineEdit::task241436_passwordEchoOnEditRestoreEchoMode() QStyleOptionFrame opt; QLineEdit *testWidget = ensureTestWidget(); - QChar fillChar = testWidget->style()->styleHint(QStyle::SH_LineEdit_PasswordCharacter, &opt, testWidget); + const int passwordCharacter = testWidget->style()->styleHint(QStyle::SH_LineEdit_PasswordCharacter, &opt, testWidget); + QVERIFY(passwordCharacter <= 0xFFFF); + const QChar fillChar(passwordCharacter); testWidget->setEchoMode(QLineEdit::PasswordEchoOnEdit); testWidget->setFocus(); -- cgit v1.2.3