From 48091975969fa5a7c436f4f51a96f26f6297af6e Mon Sep 17 00:00:00 2001 From: Giulio Camuffo <giulio.camuffo@jollamobile.com> Date: Thu, 11 Dec 2014 11:46:14 +0200 Subject: [PATCH] Fix dangling pointer access when getting dnd data in some cases Calling wl_data_source.destroy(); wl_data_offer.receive(), where the wl_data_offer is referring to the destroyed wl_data_source, was crashing the compositor. Change-Id: Iab352d63f8a93aebd0bfbcf1dc26c0e8a48a523a Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com> --- src/compositor/wayland_wrapper/qwldataoffer_p.h | 3 ++- src/compositor/wayland_wrapper/qwldatasource_p.h | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/compositor/wayland_wrapper/qwldataoffer_p.h b/src/compositor/wayland_wrapper/qwldataoffer_p.h index 5911819d8..643322f32 100644 --- a/src/compositor/wayland_wrapper/qwldataoffer_p.h +++ b/src/compositor/wayland_wrapper/qwldataoffer_p.h @@ -41,6 +41,7 @@ #ifndef WLDATAOFFER_H #define WLDATAOFFER_H +#include <QPointer> #include <QtCompositor/private/qwayland-server-wayland.h> QT_BEGIN_NAMESPACE @@ -63,7 +64,7 @@ protected: void data_offer_destroy_resource(Resource *resource) Q_DECL_OVERRIDE; private: - DataSource *m_dataSource; + QPointer<DataSource> m_dataSource; }; } diff --git a/src/compositor/wayland_wrapper/qwldatasource_p.h b/src/compositor/wayland_wrapper/qwldatasource_p.h index 01ac4cbd9..013f4b54f 100644 --- a/src/compositor/wayland_wrapper/qwldatasource_p.h +++ b/src/compositor/wayland_wrapper/qwldatasource_p.h @@ -42,7 +42,7 @@ #define WLDATASOURCE_H #include <QtCompositor/private/qwayland-server-wayland.h> - +#include <QObject> #include <QtCore/QList> QT_BEGIN_NAMESPACE @@ -53,7 +53,7 @@ class DataOffer; class DataDevice; class DataDeviceManager; -class DataSource : public QtWaylandServer::wl_data_source +class DataSource : public QObject, public QtWaylandServer::wl_data_source { public: DataSource(struct wl_client *client, uint32_t id, uint32_t time); -- GitLab