QMetaEnum: fix UB

Check ptr before usage.

Change-Id: Iac757a2e260b237d837318932cc0b5896c6e04c2
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
bb10
Anton Kudryavtsev 2018-10-15 20:08:47 +03:00 committed by Anton Kudryavtsev
parent 7bf4ebfb26
commit aa633ff276
2 changed files with 16 additions and 2 deletions

View File

@ -2652,8 +2652,10 @@ int QMetaEnum::value(int index) const
*/
bool QMetaEnum::isFlag() const
{
if (!mobj)
return false;
const int offset = priv(mobj->d.data)->revision >= 8 ? 2 : 1;
return mobj && mobj->d.data[handle + offset] & EnumIsFlag;
return mobj->d.data[handle + offset] & EnumIsFlag;
}
/*!
@ -2664,8 +2666,10 @@ bool QMetaEnum::isFlag() const
*/
bool QMetaEnum::isScoped() const
{
if (!mobj)
return false;
const int offset = priv(mobj->d.data)->revision >= 8 ? 2 : 1;
return mobj && mobj->d.data[handle + offset] & EnumIsScoped;
return mobj->d.data[handle + offset] & EnumIsScoped;
}
/*!

View File

@ -46,6 +46,7 @@ private slots:
void fromType();
void valuesToKeys_data();
void valuesToKeys();
void defaultConstructed();
};
void tst_QMetaEnum::fromType()
@ -99,6 +100,15 @@ void tst_QMetaEnum::valuesToKeys()
QCOMPARE(me.valueToKeys(windowFlags), expected);
}
void tst_QMetaEnum::defaultConstructed()
{
QMetaEnum e;
QVERIFY(!e.isValid());
QVERIFY(!e.isScoped());
QVERIFY(!e.isFlag());
QCOMPARE(e.name(), QByteArray());
}
Q_STATIC_ASSERT(QtPrivate::IsQEnumHelper<tst_QMetaEnum::SuperEnum>::Value);
Q_STATIC_ASSERT(QtPrivate::IsQEnumHelper<Qt::WindowFlags>::Value);
Q_STATIC_ASSERT(QtPrivate::IsQEnumHelper<Qt::Orientation>::Value);