From 4bf5a3c885c26150317e83555c0c3213bd7b417e Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Wed, 28 Sep 2016 00:12:36 +0200 Subject: tst_QFormLayout: Fix UB (invalid enum value) in several functions The code coerced a -123 into a QFormLayout::ItemFlags, which, however, being an enum with enumeration values 0..2, only has valid numerical values 0..3. Fix by using 3 as the value to represent the invalid enum value, and store this in a constant so as not to distribute this magic number all around the test class. Change-Id: Ie5e93a69ef5a3acdde43030b022e0cce8aec484d Reviewed-by: Thiago Macieira Reviewed-by: Marc Mutz --- .../widgets/kernel/qformlayout/tst_qformlayout.cpp | 42 ++++++++++++---------- 1 file changed, 24 insertions(+), 18 deletions(-) (limited to 'tests/auto/widgets/kernel') diff --git a/tests/auto/widgets/kernel/qformlayout/tst_qformlayout.cpp b/tests/auto/widgets/kernel/qformlayout/tst_qformlayout.cpp index 5703d7e114..5b87c0114d 100644 --- a/tests/auto/widgets/kernel/qformlayout/tst_qformlayout.cpp +++ b/tests/auto/widgets/kernel/qformlayout/tst_qformlayout.cpp @@ -48,6 +48,10 @@ #include +// ItemRole has enumerators for numerical values 0..2, thus the only +// valid numerical values for storing into an ItemRole variable are 0..3: +Q_CONSTEXPR QFormLayout::ItemRole invalidRole = QFormLayout::ItemRole(3); + static inline void setFrameless(QWidget *w) { Qt::WindowFlags flags = w->windowFlags(); @@ -528,7 +532,7 @@ void tst_QFormLayout::insertRow_QWidget_QWidget() { int row = -1; - QFormLayout::ItemRole role = QFormLayout::ItemRole(-123); + QFormLayout::ItemRole role = invalidRole; layout->getWidgetPosition(lbl1, &row, &role); QCOMPARE(row, 0); QCOMPARE(int(role), int(QFormLayout::LabelRole)); @@ -536,7 +540,7 @@ void tst_QFormLayout::insertRow_QWidget_QWidget() { int row = -1; - QFormLayout::ItemRole role = QFormLayout::ItemRole(-123); + QFormLayout::ItemRole role = invalidRole; layout->getWidgetPosition(fld1, &row, &role); QCOMPARE(row, 0); QCOMPARE(int(role), int(QFormLayout::FieldRole)); @@ -597,7 +601,7 @@ void tst_QFormLayout::insertRow_QWidget_QLayout() { int row = -1; - QFormLayout::ItemRole role = QFormLayout::ItemRole(-123); + QFormLayout::ItemRole role = invalidRole; layout->getWidgetPosition(lbl1, &row, &role); QCOMPARE(row, 0); QCOMPARE(int(role), int(QFormLayout::LabelRole)); @@ -605,7 +609,7 @@ void tst_QFormLayout::insertRow_QWidget_QLayout() { int row = -1; - QFormLayout::ItemRole role = QFormLayout::ItemRole(-123); + QFormLayout::ItemRole role = invalidRole; layout->getLayoutPosition(fld1, &row, &role); QCOMPARE(row, 0); QCOMPARE(int(role), int(QFormLayout::FieldRole)); @@ -722,7 +726,7 @@ void tst_QFormLayout::setWidget() { int row = -1; - QFormLayout::ItemRole role = QFormLayout::ItemRole(-123); + QFormLayout::ItemRole role = invalidRole; layout.getWidgetPosition(&w1, &row, &role); QCOMPARE(row, 5); QCOMPARE(int(role), int(QFormLayout::LabelRole)); @@ -730,7 +734,7 @@ void tst_QFormLayout::setWidget() { int row = -1; - QFormLayout::ItemRole role = QFormLayout::ItemRole(-123); + QFormLayout::ItemRole role = invalidRole; layout.getWidgetPosition(&w2, &row, &role); QCOMPARE(row, 3); QCOMPARE(int(role), int(QFormLayout::FieldRole)); @@ -738,7 +742,7 @@ void tst_QFormLayout::setWidget() { int row = -1; - QFormLayout::ItemRole role = QFormLayout::ItemRole(-123); + QFormLayout::ItemRole role = invalidRole; layout.getWidgetPosition(&w3, &row, &role); QCOMPARE(row, 3); QCOMPARE(int(role), int(QFormLayout::LabelRole)); @@ -746,18 +750,20 @@ void tst_QFormLayout::setWidget() { int row = -1; - QFormLayout::ItemRole role = QFormLayout::ItemRole(-123); + QFormLayout::ItemRole role = invalidRole; layout.getWidgetPosition(&w4, &row, &role); + // not found QCOMPARE(row, -1); - QCOMPARE(int(role), -123); + QCOMPARE(int(role), int(invalidRole)); } { int row = -1; - QFormLayout::ItemRole role = QFormLayout::ItemRole(-123); + QFormLayout::ItemRole role = invalidRole; layout.getWidgetPosition(0, &row, &role); + // not found QCOMPARE(row, -1); - QCOMPARE(int(role), -123); + QCOMPARE(int(role), int(invalidRole)); } } @@ -790,7 +796,7 @@ void tst_QFormLayout::setLayout() { int row = -1; - QFormLayout::ItemRole role = QFormLayout::ItemRole(-123); + QFormLayout::ItemRole role = invalidRole; layout.getLayoutPosition(&l1, &row, &role); QCOMPARE(row, 5); QCOMPARE(int(role), int(QFormLayout::LabelRole)); @@ -798,7 +804,7 @@ void tst_QFormLayout::setLayout() { int row = -1; - QFormLayout::ItemRole role = QFormLayout::ItemRole(-123); + QFormLayout::ItemRole role = invalidRole; layout.getLayoutPosition(&l2, &row, &role); QCOMPARE(row, 3); QCOMPARE(int(role), int(QFormLayout::FieldRole)); @@ -806,7 +812,7 @@ void tst_QFormLayout::setLayout() { int row = -1; - QFormLayout::ItemRole role = QFormLayout::ItemRole(-123); + QFormLayout::ItemRole role = invalidRole; layout.getLayoutPosition(&l3, &row, &role); QCOMPARE(row, 3); QCOMPARE(int(role), int(QFormLayout::LabelRole)); @@ -814,18 +820,18 @@ void tst_QFormLayout::setLayout() { int row = -1; - QFormLayout::ItemRole role = QFormLayout::ItemRole(-123); + QFormLayout::ItemRole role = invalidRole; layout.getLayoutPosition(&l4, &row, &role); QCOMPARE(row, -1); - QCOMPARE(int(role), -123); + QCOMPARE(int(role), int(invalidRole)); } { int row = -1; - QFormLayout::ItemRole role = QFormLayout::ItemRole(-123); + QFormLayout::ItemRole role = invalidRole; layout.getLayoutPosition(0, &row, &role); QCOMPARE(row, -1); - QCOMPARE(int(role), -123); + QCOMPARE(int(role), int(invalidRole)); } } -- cgit v1.2.3