mirror of
https://github.com/hyprwm/Hyprland.git
synced 2025-08-15 20:13:49 -07:00
syncobj: dont crash compositor on protocol errors (#9627)
dont call a member on null pointer if client misbehaves. as in the weak pointer being expired.
This commit is contained in:
@@ -30,7 +30,7 @@ WP<CSyncTimeline> CDRMSyncPointState::timeline() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool CDRMSyncPointState::expired() {
|
bool CDRMSyncPointState::expired() {
|
||||||
return !m_resource || !m_resource->timeline;
|
return m_resource.expired() || !m_resource->timeline;
|
||||||
}
|
}
|
||||||
|
|
||||||
UP<CSyncReleaser> CDRMSyncPointState::createSyncRelease() {
|
UP<CSyncReleaser> CDRMSyncPointState::createSyncRelease() {
|
||||||
@@ -177,9 +177,14 @@ bool CDRMSyncobjSurfaceResource::protocolError() {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!!surface->pending.buffer->acquire != !!surface->pending.buffer->release) {
|
if (!surface->pending.buffer->acquire || !surface->pending.buffer->acquire->timeline()) {
|
||||||
resource->error(surface->pending.buffer->acquire ? WP_LINUX_DRM_SYNCOBJ_SURFACE_V1_ERROR_NO_RELEASE_POINT : WP_LINUX_DRM_SYNCOBJ_SURFACE_V1_ERROR_NO_ACQUIRE_POINT,
|
resource->error(WP_LINUX_DRM_SYNCOBJ_SURFACE_V1_ERROR_NO_ACQUIRE_POINT, "Missing acquire timeline");
|
||||||
"Missing timeline");
|
surface->pending.rejected = true;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!surface->pending.buffer->release || !surface->pending.buffer->release->timeline()) {
|
||||||
|
resource->error(WP_LINUX_DRM_SYNCOBJ_SURFACE_V1_ERROR_NO_RELEASE_POINT, "Missing release timeline");
|
||||||
surface->pending.rejected = true;
|
surface->pending.rejected = true;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user