summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Otte <otte.benjamin@googlemail.com>2021-12-26 23:20:34 +0000
committerBenjamin Otte <otte.benjamin@googlemail.com>2021-12-26 23:20:34 +0000
commitdf8588e9b7ec4ed93ffafd9a3abb20e7511d4617 (patch)
treec9380b5d011805af858edda734cc3de65b563ef7
parentef51e027678bd7f2e8f435e54623b79f9ca2f36a (diff)
parentfce9b35e4df99fdc6a35b5d80aecf09f6809aeae (diff)
downloadgtk+-df8588e9b7ec4ed93ffafd9a3abb20e7511d4617.tar.gz
Merge branch 'wip/otte/for-main' into 'main'
widget: Don't queue an allocate on a nonexisting parent See merge request GNOME/gtk!4288
-rw-r--r--gtk/gtkcsstransformvalue.c2
-rw-r--r--gtk/gtkwidget.c3
-rw-r--r--testsuite/css/parser/meson.build3
-rw-r--r--testsuite/css/parser/rotate3d-crash.css3
-rw-r--r--testsuite/css/parser/rotate3d-crash.errors1
-rw-r--r--testsuite/css/parser/rotate3d-crash.ref.css0
6 files changed, 10 insertions, 2 deletions
diff --git a/gtk/gtkcsstransformvalue.c b/gtk/gtkcsstransformvalue.c
index 6cec8cd7c0..0b59cdee87 100644
--- a/gtk/gtkcsstransformvalue.c
+++ b/gtk/gtkcsstransformvalue.c
@@ -942,7 +942,7 @@ _gtk_css_transform_value_parse (GtkCssParser *parser)
while (TRUE)
{
- GtkCssTransform transform;
+ GtkCssTransform transform = { 0, };
if (gtk_css_parser_has_function (parser, "matrix"))
{
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index 092f763bdc..afe7e9224e 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -4971,7 +4971,8 @@ gtk_widget_real_css_changed (GtkWidget *widget,
{
gtk_widget_queue_resize (widget);
}
- else if (gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_TRANSFORM))
+ else if (gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_TRANSFORM) &&
+ priv->parent)
{
gtk_widget_queue_allocate (priv->parent);
}
diff --git a/testsuite/css/parser/meson.build b/testsuite/css/parser/meson.build
index 07f2ca4a73..d0fdd0d9a9 100644
--- a/testsuite/css/parser/meson.build
+++ b/testsuite/css/parser/meson.build
@@ -452,6 +452,9 @@ test_data = [
'radial-positions.errors',
'radial-positions.ref.css',
'radial.ref.css',
+ 'rotate3d-crash.css',
+ 'rotate3d-crash.errors',
+ 'rotate3d-crash.ref.css',
'selector.css',
'selector.ref.css',
'selector-original.css',
diff --git a/testsuite/css/parser/rotate3d-crash.css b/testsuite/css/parser/rotate3d-crash.css
new file mode 100644
index 0000000000..7e0b45c24a
--- /dev/null
+++ b/testsuite/css/parser/rotate3d-crash.css
@@ -0,0 +1,3 @@
+* {
+ transform: rotate3d(90,90,90);
+}
diff --git a/testsuite/css/parser/rotate3d-crash.errors b/testsuite/css/parser/rotate3d-crash.errors
new file mode 100644
index 0000000000..57ab5b7341
--- /dev/null
+++ b/testsuite/css/parser/rotate3d-crash.errors
@@ -0,0 +1 @@
+rotate3d-crash.css:2:31-32: error: GTK_CSS_PARSER_ERROR_SYNTAX
diff --git a/testsuite/css/parser/rotate3d-crash.ref.css b/testsuite/css/parser/rotate3d-crash.ref.css
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/testsuite/css/parser/rotate3d-crash.ref.css