clutter/actor: Don't write uninitialized out values on failed transform
clutter_actor_get_transformed_position() would write the uninitialized values of v2 when clutter_actor_apply_transform_to_point() fails in _clutter_actor_fully_transform_vertices() because the actor has not been added to the stage yet. When called from JS this would overwrite the zero initialized values passed in from gjs. If the uninitialized values now happen to correspond to one of the NaN float values used by mozjs to represent a pointer type, this would lead to seemingly random crashes in mozjs code later on. Avoid this by using _clutter_actor_fully_transform_vertices() directly, which allows us to check if it failed. Related: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/469 Related: https://gitlab.gnome.org/GNOME/gjs/-/issues/591 Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3453>
This commit is contained in:
parent
ec1778a37f
commit
c86d8a23c3
@ -9472,7 +9472,9 @@ clutter_actor_get_transformed_position (ClutterActor *self,
|
||||
graphene_point3d_t v2;
|
||||
|
||||
v1.x = v1.y = v1.z = 0;
|
||||
clutter_actor_apply_transform_to_point (self, &v1, &v2);
|
||||
|
||||
if (!_clutter_actor_fully_transform_vertices (self, &v1, &v2, 1))
|
||||
return;
|
||||
|
||||
if (x)
|
||||
*x = v2.x;
|
||||
|
Loading…
Reference in New Issue
Block a user