From b60c60f03bcc69bb257515a3c2a7f49923840e80 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sun, 19 May 2024 15:42:18 -0400 Subject: [PATCH] css: Report some var() syntax errors Detect cases such as var(), var(-), var("a") or var(21) early and report them as syntax errors. Test included. Related: #6715 --- gtk/css/gtkcssparser.c | 18 ++++++++++++++++-- testsuite/css/parser/variables-invalid-07.css | 15 +++++++++++++++ .../css/parser/variables-invalid-07.errors | 4 ++++ .../css/parser/variables-invalid-07.ref.css | 0 4 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 testsuite/css/parser/variables-invalid-07.css create mode 100644 testsuite/css/parser/variables-invalid-07.errors create mode 100644 testsuite/css/parser/variables-invalid-07.ref.css diff --git a/gtk/css/gtkcssparser.c b/gtk/css/gtkcssparser.c index 2c449b9653..d584ab70e4 100644 --- a/gtk/css/gtkcssparser.c +++ b/gtk/css/gtkcssparser.c @@ -1482,9 +1482,9 @@ gtk_css_parser_parse_value_into_token_stream (GtkCssParser *self) GtkCssVariableValueReference ref; char *var_name = g_strdup (gtk_css_token_get_string (token)); - if (var_name[0] != '-' || var_name[1] != '-') + if (strlen (var_name) < 3 || var_name[0] != '-' || var_name[1] != '-') { - gtk_css_parser_error_value (self, "Invalid variable name: %s", var_name); + gtk_css_parser_error_syntax (self, "Invalid variable name: %s", var_name); g_free (var_name); goto error; } @@ -1527,6 +1527,20 @@ gtk_css_parser_parse_value_into_token_stream (GtkCssParser *self) gtk_css_parser_references_append (&refs, &ref); } + else + { + if (gtk_css_token_is (token, GTK_CSS_TOKEN_EOF)) + { + gtk_css_parser_error_syntax (self, "Missing variable name"); + } + else + { + char *s = gtk_css_token_to_string (token); + gtk_css_parser_error_syntax (self, "Expected a variable name, not %s", s); + g_free (s); + } + goto error; + } } } } diff --git a/testsuite/css/parser/variables-invalid-07.css b/testsuite/css/parser/variables-invalid-07.css new file mode 100644 index 0000000000..89acc4eb1e --- /dev/null +++ b/testsuite/css/parser/variables-invalid-07.css @@ -0,0 +1,15 @@ +a { + --accent-fg-color: var(); +} + +b { + --accent-fg-color: var(-); +} + +c { + --accent-fg-color: var(a); +} + +d { + --accent-fg-color: var(21); +} diff --git a/testsuite/css/parser/variables-invalid-07.errors b/testsuite/css/parser/variables-invalid-07.errors new file mode 100644 index 0000000000..42ceda455f --- /dev/null +++ b/testsuite/css/parser/variables-invalid-07.errors @@ -0,0 +1,4 @@ +variables-invalid-07.css:2:26-27: error: GTK_CSS_PARSER_ERROR_SYNTAX +variables-invalid-07.css:6:26-27: error: GTK_CSS_PARSER_ERROR_SYNTAX +variables-invalid-07.css:10:26-27: error: GTK_CSS_PARSER_ERROR_SYNTAX +variables-invalid-07.css:14:26-28: error: GTK_CSS_PARSER_ERROR_SYNTAX diff --git a/testsuite/css/parser/variables-invalid-07.ref.css b/testsuite/css/parser/variables-invalid-07.ref.css new file mode 100644 index 0000000000..e69de29bb2