diff options
author | Johan Klokkhammer Helsing <johan.helsing@qt.io> | 2018-08-28 16:29:38 +0200 |
---|---|---|
committer | Johan Helsing <johan.helsing@qt.io> | 2018-08-29 12:55:22 +0000 |
commit | 2af5dce3e7ea3e341720c4212e1d0a12ca68f41c (patch) | |
tree | 9bd99396a96089e29efba439f75115db0c6d9a4c /src/compositor | |
parent | 6f68cada7aa652ef67a4cabf3515619088759d33 (diff) |
Compositor: Fix nullptr dereferences in fromResource functions
If there was no resource for the given wl_resource*, don't try to dereference
it.
Change-Id: I3a27a5805699148bb26029e8b4179042c3c1117a
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
Reviewed-by: Pier Luigi Fiorini <pierluigi.fiorini@liri.io>
Diffstat (limited to 'src/compositor')
-rw-r--r-- | src/compositor/compositor_api/qwaylandoutput.cpp | 4 | ||||
-rw-r--r-- | src/compositor/compositor_api/qwaylandseat.cpp | 4 | ||||
-rw-r--r-- | src/compositor/compositor_api/qwaylandsurface.cpp | 4 | ||||
-rw-r--r-- | src/compositor/extensions/qwaylandxdgshell.cpp | 8 | ||||
-rw-r--r-- | src/compositor/extensions/qwaylandxdgshellv6.cpp | 4 | ||||
-rw-r--r-- | src/compositor/wayland_wrapper/qwlregion.cpp | 4 |
6 files changed, 21 insertions, 7 deletions
diff --git a/src/compositor/compositor_api/qwaylandoutput.cpp b/src/compositor/compositor_api/qwaylandoutput.cpp index b1ee9bbe0..c9cc5a136 100644 --- a/src/compositor/compositor_api/qwaylandoutput.cpp +++ b/src/compositor/compositor_api/qwaylandoutput.cpp @@ -329,7 +329,9 @@ void QWaylandOutput::initialize() */ QWaylandOutput *QWaylandOutput::fromResource(wl_resource *resource) { - return static_cast<QWaylandOutputPrivate *>(QWaylandOutputPrivate::Resource::fromResource(resource)->output_object)->q_func(); + if (auto *r = QWaylandOutputPrivate::Resource::fromResource(resource)) + return static_cast<QWaylandOutputPrivate *>(r->output_object)->q_func(); + return nullptr; } /*! diff --git a/src/compositor/compositor_api/qwaylandseat.cpp b/src/compositor/compositor_api/qwaylandseat.cpp index 957f5ea83..60d4d6fd9 100644 --- a/src/compositor/compositor_api/qwaylandseat.cpp +++ b/src/compositor/compositor_api/qwaylandseat.cpp @@ -631,7 +631,9 @@ bool QWaylandSeat::isOwner(QInputEvent *inputEvent) const */ QWaylandSeat *QWaylandSeat::fromSeatResource(struct ::wl_resource *resource) { - return static_cast<QWaylandSeatPrivate *>(QWaylandSeatPrivate::Resource::fromResource(resource)->seat_object)->q_func(); + if (auto *r = QWaylandSeatPrivate::Resource::fromResource(resource)) + return static_cast<QWaylandSeatPrivate *>(r->seat_object)->q_func(); + return nullptr; } /*! diff --git a/src/compositor/compositor_api/qwaylandsurface.cpp b/src/compositor/compositor_api/qwaylandsurface.cpp index 9783b5848..632b1757f 100644 --- a/src/compositor/compositor_api/qwaylandsurface.cpp +++ b/src/compositor/compositor_api/qwaylandsurface.cpp @@ -748,7 +748,9 @@ QList<QWaylandView *> QWaylandSurface::views() const */ QWaylandSurface *QWaylandSurface::fromResource(::wl_resource *res) { - return static_cast<QWaylandSurfacePrivate *>(QWaylandSurfacePrivate::Resource::fromResource(res)->surface_object)->q_func(); + if (auto *r = QWaylandSurfacePrivate::Resource::fromResource(res)) + return static_cast<QWaylandSurfacePrivate *>(r->surface_object)->q_func(); + return nullptr; } /*! diff --git a/src/compositor/extensions/qwaylandxdgshell.cpp b/src/compositor/extensions/qwaylandxdgshell.cpp index 175caea62..90841b117 100644 --- a/src/compositor/extensions/qwaylandxdgshell.cpp +++ b/src/compositor/extensions/qwaylandxdgshell.cpp @@ -1127,7 +1127,9 @@ QWaylandSurfaceRole *QWaylandXdgToplevel::role() */ QWaylandXdgToplevel *QWaylandXdgToplevel::fromResource(wl_resource *resource) { - return static_cast<QWaylandXdgToplevelPrivate *>(QWaylandXdgToplevelPrivate::Resource::fromResource(resource)->xdg_toplevel_object)->q_func(); + if (auto *r = QWaylandXdgToplevelPrivate::Resource::fromResource(resource)) + return static_cast<QWaylandXdgToplevelPrivate *>(r->xdg_toplevel_object)->q_func(); + return nullptr; } /*! @@ -2006,7 +2008,9 @@ void QWaylandXdgPositioner::xdg_positioner_set_offset(QtWaylandServer::xdg_posit QWaylandXdgPositioner *QWaylandXdgPositioner::fromResource(wl_resource *resource) { - return static_cast<QWaylandXdgPositioner *>(Resource::fromResource(resource)->xdg_positioner_object); + if (auto *r = Resource::fromResource(resource)) + return static_cast<QWaylandXdgPositioner *>(r->xdg_positioner_object); + return nullptr; } Qt::Edges QWaylandXdgPositioner::convertToEdges(anchor anchor) diff --git a/src/compositor/extensions/qwaylandxdgshellv6.cpp b/src/compositor/extensions/qwaylandxdgshellv6.cpp index 648f2a1e1..a8b0d3914 100644 --- a/src/compositor/extensions/qwaylandxdgshellv6.cpp +++ b/src/compositor/extensions/qwaylandxdgshellv6.cpp @@ -1997,7 +1997,9 @@ void QWaylandXdgPositionerV6::zxdg_positioner_v6_set_offset(QtWaylandServer::zxd QWaylandXdgPositionerV6 *QWaylandXdgPositionerV6::fromResource(wl_resource *resource) { - return static_cast<QWaylandXdgPositionerV6 *>(Resource::fromResource(resource)->zxdg_positioner_v6_object); + if (auto *r = Resource::fromResource(resource)) + return static_cast<QWaylandXdgPositionerV6 *>(r->zxdg_positioner_v6_object); + return nullptr; } QT_END_NAMESPACE diff --git a/src/compositor/wayland_wrapper/qwlregion.cpp b/src/compositor/wayland_wrapper/qwlregion.cpp index 040538411..52c19e946 100644 --- a/src/compositor/wayland_wrapper/qwlregion.cpp +++ b/src/compositor/wayland_wrapper/qwlregion.cpp @@ -54,7 +54,9 @@ Region::~Region() Region *Region::fromResource(struct ::wl_resource *resource) { - return static_cast<Region *>(Resource::fromResource(resource)->region_object); + if (auto *r = Resource::fromResource(resource)) + return static_cast<Region *>(r->region_object); + return nullptr; } void Region::region_destroy_resource(Resource *) |