aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2020-03-24 18:17:33 +0100
committerUlf Hermann <ulf.hermann@qt.io>2020-03-24 18:57:02 +0100
commit674992d07c3efaf7da7797e4b4a2a8e0b98b1813 (patch)
tree9846080e679b09a3edec0a3ae13d98b422faec2c /tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
parent692e7cfdad0df2989dea37c9bfaeb0a0bcc41935 (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/auto/qml/qqmllanguage/tst_qqmllanguage.cpp')
-rw-r--r--tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp8
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);