CSS parser: fix the pseudo-classes array length
The pseudoclass array is declared with length "NumPseudos - 1", but the declaration has actually 44 elements, not 45. This caused a zero-initialized last element to be silently appended to the array. The zero-initialized element broke the sorting of the array, which in turn broke std::lower_bound usage (although of course the problem was there from before switching to the standard library algorithms). Task-number: QTBUG-36933 Change-Id: I8a02891fc36761b6ae72d15a0a8d6c6a96813947 Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
This commit is contained in:
parent
b1a882f178
commit
c453571d75
@ -508,7 +508,7 @@ const quint64 PseudoClass_EditFocus = Q_UINT64_C(0x0000080000000000);
|
||||
const quint64 PseudoClass_Alternate = Q_UINT64_C(0x0000100000000000);
|
||||
// The Any specifier is never generated, but can be used as a wildcard in searches.
|
||||
const quint64 PseudoClass_Any = Q_UINT64_C(0x0000ffffffffffff);
|
||||
const int NumPseudos = 46;
|
||||
const int NumPseudos = 45;
|
||||
|
||||
struct Pseudo
|
||||
{
|
||||
|
@ -99,6 +99,7 @@ private slots:
|
||||
void task232085_spinBoxLineEditBg();
|
||||
void changeStyleInChangeEvent();
|
||||
void QTBUG15910_crashNullWidget();
|
||||
void QTBUG36933_brokenPseudoClassLookup();
|
||||
|
||||
//at the end because it mess with the style.
|
||||
void widgetStyle();
|
||||
@ -1656,6 +1657,37 @@ void tst_QStyleSheetStyle::QTBUG15910_crashNullWidget()
|
||||
QVERIFY(QTest::qWaitForWindowExposed(&w));
|
||||
}
|
||||
|
||||
void tst_QStyleSheetStyle::QTBUG36933_brokenPseudoClassLookup()
|
||||
{
|
||||
const int rowCount = 10;
|
||||
const int columnCount = 10;
|
||||
|
||||
QTableWidget widget(rowCount, columnCount);
|
||||
|
||||
for (int row = 0; row < rowCount; ++row) {
|
||||
for (int column = 0; column < columnCount; ++column)
|
||||
widget.setItem(row, column, new QTableWidgetItem(QStringLiteral("row %1 column %2").arg(row + 1).arg(column + 1)));
|
||||
|
||||
// put no visible text for the vertical headers, but still put some text or they will collapse
|
||||
widget.setVerticalHeaderItem(row, new QTableWidgetItem(QStringLiteral(" ")));
|
||||
}
|
||||
|
||||
// parsing of this stylesheet must not crash, and it must be correctly applied
|
||||
widget.setStyleSheet(QStringLiteral("QHeaderView::section:vertical { background-color: #FF0000 }"));
|
||||
|
||||
widget.show();
|
||||
QVERIFY(QTest::qWaitForWindowExposed(&widget));
|
||||
|
||||
widget.activateWindow();
|
||||
QApplication::setActiveWindow(&widget);
|
||||
QVERIFY(QTest::qWaitForWindowActive(&widget));
|
||||
|
||||
QHeaderView *verticalHeader = widget.verticalHeader();
|
||||
QImage image(verticalHeader->size(), QImage::Format_ARGB32);
|
||||
verticalHeader->render(&image);
|
||||
QVERIFY(testForColors(image, QColor(0xFF, 0x00, 0x00)));
|
||||
}
|
||||
|
||||
|
||||
QTEST_MAIN(tst_QStyleSheetStyle)
|
||||
#include "tst_qstylesheetstyle.moc"
|
||||
|
Loading…
Reference in New Issue
Block a user