File 581adc21b3cfd87aa13fa7cf2e9574c1111fa50b.patch of Package maliit-framework
From 581adc21b3cfd87aa13fa7cf2e9574c1111fa50b Mon Sep 17 00:00:00 2001
From: Dmitry Shachnev <mitya57@gmail.com>
Date: Sun, 18 Sep 2022 16:33:46 +0300
Subject: [PATCH] Prevent QList returned by subject->pluginDescriptions from
being deleted
If we don't save QList to a variable, it becomes deleted, and pointer
returned by findPluginDescriptions becomes invalid. Then trying to call
description->enabled() results in a segmentation fault.
---
.../ft_mimpluginmanager/ft_mimpluginmanager.cpp | 17 +++++++++++------
1 file changed, 11 insertions(+), 6 deletions(-)
diff --git a/tests/ft_mimpluginmanager/ft_mimpluginmanager.cpp b/tests/ft_mimpluginmanager/ft_mimpluginmanager.cpp
index ce0eafd0..32ba5ddc 100644
--- a/tests/ft_mimpluginmanager/ft_mimpluginmanager.cpp
+++ b/tests/ft_mimpluginmanager/ft_mimpluginmanager.cpp
@@ -202,16 +202,19 @@ void Ft_MIMPluginManager::testPluginDescriptions()
MImSettings enabledPluginsSettings(EnabledPluginsKey);
QStringList enabledPlugins;
+
+ QList<MImPluginDescription> pluginDescriptions;
const MImPluginDescription *description = 0;
enabledPlugins << pluginId + ":" + "dummyimsv1";
enabledPluginsSettings.set(enabledPlugins);
QCOMPARE(spy.count(), 1);
- description = findPluginDescriptions(subject->pluginDescriptions(Maliit::OnScreen), pluginName);
+ pluginDescriptions = subject->pluginDescriptions(Maliit::OnScreen);
+ description = findPluginDescriptions(pluginDescriptions, pluginName);
QVERIFY(description);
QVERIFY(description->enabled());
- description = findPluginDescriptions(subject->pluginDescriptions(Maliit::OnScreen), pluginName3);
+ description = findPluginDescriptions(pluginDescriptions, pluginName3);
QVERIFY(description);
QVERIFY(!description->enabled());
description = 0;
@@ -220,10 +223,11 @@ void Ft_MIMPluginManager::testPluginDescriptions()
enabledPluginsSettings.set(enabledPlugins);
QCOMPARE(spy.count(), 2);
- description = findPluginDescriptions(subject->pluginDescriptions(Maliit::OnScreen), pluginName);
+ pluginDescriptions = subject->pluginDescriptions(Maliit::OnScreen);
+ description = findPluginDescriptions(pluginDescriptions, pluginName);
QVERIFY(description);
QVERIFY(description->enabled());
- description = findPluginDescriptions(subject->pluginDescriptions(Maliit::OnScreen), pluginName3);
+ description = findPluginDescriptions(pluginDescriptions, pluginName3);
QVERIFY(description);
QVERIFY(!description->enabled());
description = 0;
@@ -232,10 +236,11 @@ void Ft_MIMPluginManager::testPluginDescriptions()
enabledPluginsSettings.set(enabledPlugins);
QCOMPARE(spy.count(), 3);
- description = findPluginDescriptions(subject->pluginDescriptions(Maliit::OnScreen), pluginName);
+ pluginDescriptions = subject->pluginDescriptions(Maliit::OnScreen);
+ description = findPluginDescriptions(pluginDescriptions, pluginName);
QVERIFY(description);
QVERIFY(description->enabled());
- description = findPluginDescriptions(subject->pluginDescriptions(Maliit::OnScreen), pluginName3);
+ description = findPluginDescriptions(pluginDescriptions, pluginName3);
QVERIFY(description);
QVERIFY(description->enabled());
description = 0;