From a1a3a7cd8abbfcc778c3b57953fd931c87a49278 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Thu, 12 Dec 2019 11:36:47 +0100 Subject: Avoid crashing when constructing color-space from invalid enum This is not to be taken as supported and is still undefined behavior, but I prefer we do not crash. Change-Id: Icf4f3398bfd57fcbdc611a5a821a1f2de0838330 Reviewed-by: Eirik Aavitsland --- .../gui/painting/qcolorspace/tst_qcolorspace.cpp | 34 ++++++++++++++++------ 1 file changed, 25 insertions(+), 9 deletions(-) (limited to 'tests/auto/gui/painting') diff --git a/tests/auto/gui/painting/qcolorspace/tst_qcolorspace.cpp b/tests/auto/gui/painting/qcolorspace/tst_qcolorspace.cpp index 531e14d25b..945a4772f3 100644 --- a/tests/auto/gui/painting/qcolorspace/tst_qcolorspace.cpp +++ b/tests/auto/gui/painting/qcolorspace/tst_qcolorspace.cpp @@ -105,37 +105,47 @@ void tst_QColorSpace::movable() void tst_QColorSpace::namedColorSpaces_data() { QTest::addColumn("namedColorSpace"); + QTest::addColumn("isValid"); QTest::addColumn("primariesId"); QTest::addColumn("transferFunctionId"); - QTest::newRow("sRGB") << QColorSpace::SRgb + QTest::newRow("sRGB") << QColorSpace::SRgb << true << QColorSpace::Primaries::SRgb << QColorSpace::TransferFunction::SRgb; - QTest::newRow("sRGB Linear") << QColorSpace::SRgbLinear + QTest::newRow("sRGB Linear") << QColorSpace::SRgbLinear << true << QColorSpace::Primaries::SRgb << QColorSpace::TransferFunction::Linear; - QTest::newRow("Adobe RGB") << QColorSpace::AdobeRgb + QTest::newRow("Adobe RGB") << QColorSpace::AdobeRgb << true << QColorSpace::Primaries::AdobeRgb << QColorSpace::TransferFunction::Gamma; - QTest::newRow("Display-P3") << QColorSpace::DisplayP3 + QTest::newRow("Display-P3") << QColorSpace::DisplayP3 << true << QColorSpace::Primaries::DciP3D65 << QColorSpace::TransferFunction::SRgb; - QTest::newRow("ProPhoto RGB") << QColorSpace::ProPhotoRgb + QTest::newRow("ProPhoto RGB") << QColorSpace::ProPhotoRgb << true << QColorSpace::Primaries::ProPhotoRgb << QColorSpace::TransferFunction::ProPhotoRgb; + QTest::newRow("0") << QColorSpace::NamedColorSpace(0) + << false + << QColorSpace::Primaries::Custom + << QColorSpace::TransferFunction::Custom; + QTest::newRow("1027") << QColorSpace::NamedColorSpace(1027) + << false + << QColorSpace::Primaries::Custom + << QColorSpace::TransferFunction::Custom; } void tst_QColorSpace::namedColorSpaces() { QFETCH(QColorSpace::NamedColorSpace, namedColorSpace); + QFETCH(bool, isValid); QFETCH(QColorSpace::Primaries, primariesId); QFETCH(QColorSpace::TransferFunction, transferFunctionId); + if (!isValid) + QTest::ignoreMessage(QtWarningMsg, QRegularExpression("QColorSpace attempted constructed from invalid QColorSpace::NamedColorSpace")); QColorSpace colorSpace = namedColorSpace; - QVERIFY(colorSpace.isValid()); - - QCOMPARE(colorSpace, namedColorSpace); + QCOMPARE(colorSpace.isValid(), isValid); QCOMPARE(colorSpace.primaries(), primariesId); QCOMPARE(colorSpace.transferFunction(), transferFunctionId); } @@ -149,15 +159,21 @@ void tst_QColorSpace::toIccProfile_data() void tst_QColorSpace::toIccProfile() { QFETCH(QColorSpace::NamedColorSpace, namedColorSpace); + QFETCH(bool, isValid); QFETCH(QColorSpace::Primaries, primariesId); QFETCH(QColorSpace::TransferFunction, transferFunctionId); Q_UNUSED(primariesId); Q_UNUSED(transferFunctionId); + if (!isValid) + QTest::ignoreMessage(QtWarningMsg, QRegularExpression("QColorSpace attempted constructed from invalid QColorSpace::NamedColorSpace")); QColorSpace colorSpace = namedColorSpace; QByteArray iccProfile = colorSpace.iccProfile(); - QVERIFY(!iccProfile.isEmpty()); + QCOMPARE(iccProfile.isEmpty(), !isValid); + + if (!isValid) + return; QColorSpace colorSpace2 = QColorSpace::fromIccProfile(iccProfile); QVERIFY(colorSpace2.isValid()); -- cgit v1.2.3