mirror of
https://github.com/hyprwm/Hyprland.git
synced 2025-07-25 17:21:54 -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() {
|
||||
return !m_resource || !m_resource->timeline;
|
||||
return m_resource.expired() || !m_resource->timeline;
|
||||
}
|
||||
|
||||
UP<CSyncReleaser> CDRMSyncPointState::createSyncRelease() {
|
||||
@@ -177,9 +177,14 @@ bool CDRMSyncobjSurfaceResource::protocolError() {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!!surface->pending.buffer->acquire != !!surface->pending.buffer->release) {
|
||||
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,
|
||||
"Missing timeline");
|
||||
if (!surface->pending.buffer->acquire || !surface->pending.buffer->acquire->timeline()) {
|
||||
resource->error(WP_LINUX_DRM_SYNCOBJ_SURFACE_V1_ERROR_NO_ACQUIRE_POINT, "Missing acquire 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;
|
||||
return true;
|
||||
}
|
||||
|
Reference in New Issue
Block a user