summaryrefslogtreecommitdiffstats
path: root/tests/auto/gui
diff options
context:
space:
mode:
authorEskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>2014-10-09 12:46:04 +0200
committerEskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>2014-10-10 13:37:59 +0200
commit74a20b77a67ec4d5a8be0f59302075d34151dc05 (patch)
treed9ac556372caf03b6b56801f15402424d9c5d597 /tests/auto/gui
parent9685c72e37d618cf44aa15c892375b3c8d27e578 (diff)
Fix memory leak in QClipboard::setMimeData()
The setMimeData() function is documented to take ownership of the object passed in, but in the case where the platform plugin did not support the requested mode, we would simply return without deleting the object nor telling the application, so it would cause a potential memory leak. We need to honor the contract, even when we fail to set the mime data. Test was updated to avoid verifying the leak in cases where the platform does not support all modes. [ChangeLog][QtGui][Clipboard] Fixed a memory leak in setMimeData() when the platform plugin did not support the requested mode. Task-number: QTBUG-41852 Change-Id: I2112da1613199fe1b56724e7ccf097b9e912c117 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@digia.com>
Diffstat (limited to 'tests/auto/gui')
-rw-r--r--tests/auto/gui/kernel/qclipboard/tst_qclipboard.cpp18
1 files changed, 12 insertions, 6 deletions
diff --git a/tests/auto/gui/kernel/qclipboard/tst_qclipboard.cpp b/tests/auto/gui/kernel/qclipboard/tst_qclipboard.cpp
index 167e4b41bc..a88f41f7b8 100644
--- a/tests/auto/gui/kernel/qclipboard/tst_qclipboard.cpp
+++ b/tests/auto/gui/kernel/qclipboard/tst_qclipboard.cpp
@@ -340,8 +340,10 @@ void tst_QClipboard::setMimeData()
data->setText("foo");
QGuiApplication::clipboard()->setMimeData(data, QClipboard::Clipboard);
- QGuiApplication::clipboard()->setMimeData(data, QClipboard::Selection);
- QGuiApplication::clipboard()->setMimeData(data, QClipboard::FindBuffer);
+ if (QGuiApplication::clipboard()->supportsSelection())
+ QGuiApplication::clipboard()->setMimeData(data, QClipboard::Selection);
+ if (QGuiApplication::clipboard()->supportsFindBuffer())
+ QGuiApplication::clipboard()->setMimeData(data, QClipboard::FindBuffer);
QSignalSpy spySelection(QGuiApplication::clipboard(), SIGNAL(selectionChanged()));
QSignalSpy spyData(QGuiApplication::clipboard(), SIGNAL(dataChanged()));
@@ -373,8 +375,10 @@ void tst_QClipboard::setMimeData()
data->setText("foo");
QGuiApplication::clipboard()->setMimeData(data, QClipboard::Clipboard);
- QGuiApplication::clipboard()->setMimeData(data, QClipboard::Selection);
- QGuiApplication::clipboard()->setMimeData(data, QClipboard::FindBuffer);
+ if (QGuiApplication::clipboard()->supportsSelection())
+ QGuiApplication::clipboard()->setMimeData(data, QClipboard::Selection);
+ if (QGuiApplication::clipboard()->supportsFindBuffer())
+ QGuiApplication::clipboard()->setMimeData(data, QClipboard::FindBuffer);
QMimeData *newData = new QMimeData;
newData->setText("bar");
@@ -385,8 +389,10 @@ void tst_QClipboard::setMimeData()
spyFindBuffer.clear();
QGuiApplication::clipboard()->setMimeData(newData, QClipboard::Clipboard);
- QGuiApplication::clipboard()->setMimeData(newData, QClipboard::Selection); // used to crash on X11
- QGuiApplication::clipboard()->setMimeData(newData, QClipboard::FindBuffer);
+ if (QGuiApplication::clipboard()->supportsSelection())
+ QGuiApplication::clipboard()->setMimeData(newData, QClipboard::Selection); // used to crash on X11
+ if (QGuiApplication::clipboard()->supportsFindBuffer())
+ QGuiApplication::clipboard()->setMimeData(newData, QClipboard::FindBuffer);
if (QGuiApplication::clipboard()->supportsSelection())
QCOMPARE(spySelection.count(), 1);