From 6c92fda9a71f00be801fcfc96f5f503b70fa3f00 Mon Sep 17 00:00:00 2001
From: Giulio Camuffo <giulio.camuffo@kdab.com>
Date: Sat, 15 Oct 2016 09:29:54 +0200
Subject: [PATCH] Don't return a null QMimeData from the clipboard

The documentation for QClipboard::mimeData() doesn't say that the returned
value can be null, and some clients just dereference that without checking.
So instead return an empty QMimeData.

Change-Id: Ieec3140af4e7f33cde98ed96fd96b2674d0d0f9f
Reviewed-by: Pier Luigi Fiorini <pierluigi.fiorini@hawaiios.org>
Reviewed-by: Johan Helsing <johan.helsing@qt.io>
---
 src/client/qwaylandclipboard.cpp | 6 +++---
 src/client/qwaylandclipboard_p.h | 2 ++
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/client/qwaylandclipboard.cpp b/src/client/qwaylandclipboard.cpp
index a2b7a669..5399e79d 100644
--- a/src/client/qwaylandclipboard.cpp
+++ b/src/client/qwaylandclipboard.cpp
@@ -54,11 +54,11 @@ QWaylandClipboard::~QWaylandClipboard()
 QMimeData *QWaylandClipboard::mimeData(QClipboard::Mode mode)
 {
     if (mode != QClipboard::Clipboard)
-        return 0;
+        return &m_emptyData;
 
     QWaylandInputDevice *inputDevice = mDisplay->currentInputDevice();
     if (!inputDevice || !inputDevice->dataDevice())
-        return 0;
+        return &m_emptyData;
 
     QWaylandDataSource *source = inputDevice->dataDevice()->selectionSource();
     if (source) {
@@ -68,7 +68,7 @@ QMimeData *QWaylandClipboard::mimeData(QClipboard::Mode mode)
     if (inputDevice->dataDevice()->selectionOffer())
         return inputDevice->dataDevice()->selectionOffer()->mimeData();
 
-    return 0;
+    return &m_emptyData;
 }
 
 void QWaylandClipboard::setMimeData(QMimeData *data, QClipboard::Mode mode)
diff --git a/src/client/qwaylandclipboard_p.h b/src/client/qwaylandclipboard_p.h
index 02223076..e9344c5f 100644
--- a/src/client/qwaylandclipboard_p.h
+++ b/src/client/qwaylandclipboard_p.h
@@ -47,6 +47,7 @@
 
 #include <qpa/qplatformclipboard.h>
 #include <QtCore/QVariant>
+#include <QtCore/QMimeData>
 
 #include <QtWaylandClient/private/qwaylandclientexport_p.h>
 
@@ -70,6 +71,7 @@ public:
 
 private:
     QWaylandDisplay *mDisplay;
+    QMimeData m_emptyData;
 };
 
 }
-- 
GitLab