diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2020-03-24 18:17:33 +0100 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2020-03-24 18:57:02 +0100 |
commit | 674992d07c3efaf7da7797e4b4a2a8e0b98b1813 (patch) | |
tree | 9846080e679b09a3edec0a3ae13d98b422faec2c /tests | |
parent | 692e7cfdad0df2989dea37c9bfaeb0a0bcc41935 (diff) |
tst_qqmllanguage: Don't leak malloc()'d unit data
When intrusively playing with compilation units, we need to play by the
rules and actually free them when we are done.
Task-number: QTBUG-82768
Change-Id: I75ac0d01d48922a6a214df0c9d2345e27fb39bff
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp b/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp index 6abcf13b5f..3a4fba8002 100644 --- a/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp +++ b/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp @@ -2471,12 +2471,16 @@ void tst_qqmllanguage::scriptStringWithoutSourceCode() QQmlRefPointer<QQmlTypeData> td = eng->typeLoader.getType(url); Q_ASSERT(td); - const QV4::CompiledData::Unit *readOnlyQmlUnit = td->compilationUnit()->unitData(); + QQmlRefPointer<QV4::ExecutableCompilationUnit> compilationUnit = td->compilationUnit(); + const QV4::CompiledData::Unit *readOnlyQmlUnit = compilationUnit->unitData(); Q_ASSERT(readOnlyQmlUnit); QV4::CompiledData::Unit *qmlUnit = reinterpret_cast<QV4::CompiledData::Unit *>(malloc(readOnlyQmlUnit->unitSize)); memcpy(qmlUnit, readOnlyQmlUnit, readOnlyQmlUnit->unitSize); + + if (!(readOnlyQmlUnit->flags & QV4::CompiledData::Unit::StaticData)) + free(const_cast<QV4::CompiledData::Unit *>(readOnlyQmlUnit)); + qmlUnit->flags &= ~QV4::CompiledData::Unit::StaticData; - QQmlRefPointer<QV4::ExecutableCompilationUnit> compilationUnit = td->compilationUnit(); compilationUnit->setUnitData(qmlUnit); const QV4::CompiledData::Object *rootObject = compilationUnit->objectAt(/*root object*/0); |