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 <eirik.aavitsland@qt.io>bb10
parent
deeaa500ad
commit
a1a3a7cd8a
|
|
@ -422,6 +422,10 @@ QColorSpace::QColorSpace()
|
|||
*/
|
||||
QColorSpace::QColorSpace(NamedColorSpace namedColorSpace)
|
||||
{
|
||||
if (namedColorSpace < QColorSpace::SRgb || namedColorSpace > QColorSpace::ProPhotoRgb) {
|
||||
qWarning() << "QColorSpace attempted constructed from invalid QColorSpace::NamedColorSpace: " << int(namedColorSpace);
|
||||
return;
|
||||
}
|
||||
static QColorSpacePrivate *predefinedColorspacePrivates[QColorSpace::ProPhotoRgb + 1];
|
||||
if (!predefinedColorspacePrivates[namedColorSpace]) {
|
||||
predefinedColorspacePrivates[namedColorSpace] = new QColorSpacePrivate(namedColorSpace);
|
||||
|
|
|
|||
|
|
@ -105,37 +105,47 @@ void tst_QColorSpace::movable()
|
|||
void tst_QColorSpace::namedColorSpaces_data()
|
||||
{
|
||||
QTest::addColumn<QColorSpace::NamedColorSpace>("namedColorSpace");
|
||||
QTest::addColumn<bool>("isValid");
|
||||
QTest::addColumn<QColorSpace::Primaries>("primariesId");
|
||||
QTest::addColumn<QColorSpace::TransferFunction>("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());
|
||||
|
|
|
|||
Loading…
Reference in New Issue