aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2021-09-15 16:30:14 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2021-09-15 20:28:10 +0000
commit083181c6cc851bccc60f523bcf6073feb2d36afc (patch)
treee71c3f165022408c70390ccf2a4aa463d8aa20e7
parenteddd5be86ee4dfaf53d95091fe2ca7ff9dcccd4e (diff)
shiboken6: Fix potential invalid memory read
Do not store a reference to the (cached) function modifications in CppGenerator::writeVirtualMethodNative() as nested method calls may invalidate it. Change-Id: Iac6b0f27649935c875603c6fff10a80d98824714 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Christian Tismer <tismer@stackless.com> (cherry picked from commit 393543d02ac5b8908ff80f75e0460bbb4fb901aa) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--sources/shiboken6/generator/shiboken/cppgenerator.cpp9
1 files changed, 4 insertions, 5 deletions
diff --git a/sources/shiboken6/generator/shiboken/cppgenerator.cpp b/sources/shiboken6/generator/shiboken/cppgenerator.cpp
index e84f29303..6a3cb0fe9 100644
--- a/sources/shiboken6/generator/shiboken/cppgenerator.cpp
+++ b/sources/shiboken6/generator/shiboken/cppgenerator.cpp
@@ -1002,9 +1002,8 @@ void CppGenerator::writeVirtualMethodNative(TextStream &s,
s << functionSignature(func, prefix, QString(), Generator::SkipDefaultValues|Generator::OriginalTypeDescription)
<< "\n{\n" << indent;
- const FunctionModificationList &functionModifications = func->modifications();
-
- const QString returnStatement = virtualMethodReturn(s, api(), func, functionModifications);
+ const QString returnStatement = virtualMethodReturn(s, api(), func,
+ func->modifications());
if (func->isAbstract() && func->isModifiedRemoved()) {
qCWarning(lcShiboken, "%s", qPrintable(msgPureVirtualFunctionRemoved(func.data())));
@@ -1126,7 +1125,7 @@ void CppGenerator::writeVirtualMethodNative(TextStream &s,
bool invalidateReturn = false;
QSet<int> invalidateArgs;
- for (const FunctionModification &funcMod : functionModifications) {
+ for (const FunctionModification &funcMod : func->modifications()) {
for (const ArgumentModification &argMod : funcMod.argument_mods()) {
const int index = argMod.index();
if (argMod.resetAfterUse() && !invalidateArgs.contains(index)) {
@@ -1228,7 +1227,7 @@ void CppGenerator::writeVirtualMethodNative(TextStream &s,
}
- for (const FunctionModification &funcMod : functionModifications) {
+ for (const FunctionModification &funcMod : func->modifications()) {
for (const ArgumentModification &argMod : funcMod.argument_mods()) {
if (argMod.index() == 0
&& argMod.nativeOwnership() == TypeSystem::CppOwnership) {