Fix crash in parse_border()

The bug was introduced in commit:
	9b7640b8 by Benjamin Otte, 2012-03-26 17:24:02
	styleproperty: Make _gtk_style_property_parse_value() return a CssValue

In that commit, `values` changed from `GValue*` to `GtkCssValue**`,
but one `!G_IS_VALUE (&values[8])` was left untouched. As a result,
if `border` shorthand contains anything after color, it might crash,
depending on memory layout.

New test included.

Fixes: #751
This commit is contained in:
Alexandr Miloslavskiy 2019-11-21 20:26:22 +01:00 committed by Benjamin Otte
parent 3804d7a0ca
commit 1efb72210d
6 changed files with 12 additions and 1 deletions

View File

@ -396,7 +396,7 @@ parse_border (GtkCssShorthandProperty *shorthand,
values[6] = _gtk_css_value_ref (values[4]); values[6] = _gtk_css_value_ref (values[4]);
values[7] = _gtk_css_value_ref (values[4]); values[7] = _gtk_css_value_ref (values[4]);
} }
else if (!G_IS_VALUE (&values[8])) else if (values[8] == NULL)
{ {
values[8] = _gtk_css_color_value_parse (parser); values[8] = _gtk_css_color_value_parse (parser);
if (values[8] == NULL) if (values[8] == NULL)

View File

@ -206,6 +206,9 @@ test_data = \
border-color.ref.css \ border-color.ref.css \
border-color-currentcolor.css \ border-color-currentcolor.css \
border-color-currentcolor.ref.css \ border-color-currentcolor.ref.css \
border-crash-3.24.css \
border-crash-3.24.errors \
border-crash-3.24.ref.css \
border-image-source.css \ border-image-source.css \
border-image-source.ref.css \ border-image-source.ref.css \
border-image-repeat.css \ border-image-repeat.css \

View File

@ -0,0 +1,4 @@
* {
border: 2px solid alpha(black, 0.3)
padding: 2px;
}

View File

@ -0,0 +1 @@
border-crash-3.24.css:3: error: GTK_CSS_PROVIDER_ERROR_SYNTAX

View File

@ -181,6 +181,9 @@ test_data = [
'border-color-currentcolor.ref.css', 'border-color-currentcolor.ref.css',
'border-color.css', 'border-color.css',
'border-color.ref.css', 'border-color.ref.css',
'border-crash-3.24.css',
'border-crash-3.24.errors',
'border-crash-3.24.ref.css',
'border-image-repeat.css', 'border-image-repeat.css',
'border-image-repeat.ref.css', 'border-image-repeat.ref.css',
'border-image-slice.css', 'border-image-slice.css',