|| c == '-';
}
-static gboolean
-is_valid_escape (char c1, char c2)
-{
- return c1 == '\\'
- && !is_newline (c2);
-}
-
static gboolean
is_non_printable (char c)
{
|| c == 0x7F;
}
+static gboolean
+is_valid_escape (const char *data,
+ const char *end)
+{
+ switch (end - data)
+ {
+ default:
+ if (is_newline (data[1]))
+ return FALSE;
+ G_GNUC_FALLTHROUGH;
+
+ case 1:
+ return data[0] == '\\';
+
+ case 0:
+ return FALSE;
+ }
+}
+
static inline gsize
gtk_css_tokenizer_remaining (GtkCssTokenizer *tokenizer)
{
static gboolean
gtk_css_tokenizer_has_valid_escape (GtkCssTokenizer *tokenizer)
{
- switch (gtk_css_tokenizer_remaining (tokenizer))
- {
- case 0:
- return FALSE;
- case 1:
- return *tokenizer->data == '\\';
- default:
- return is_valid_escape (tokenizer->data[0], tokenizer->data[1]);
- }
+ return is_valid_escape (tokenizer->data, tokenizer->end);
}
static gboolean
if (i == 0)
{
- value = g_utf8_get_char_validated (tokenizer->data, gtk_css_tokenizer_remaining (tokenizer));
+ gsize remaining = gtk_css_tokenizer_remaining (tokenizer);
+ if (remaining == 0)
+ return 0xFFFD;
+
+ value = g_utf8_get_char_validated (tokenizer->data, remaining);
if (value == (gunichar) -1 || value == (gunichar) -2)
value = 0;
'background-shorthand-single.ref.css',
'background-size.css',
'background-size.ref.css',
+ 'backslash.css',
+ 'backslash.errors',
+ 'backslash.ref.css',
+ 'backslash-eof-is-identifier.css',
+ 'backslash-eof-is-identifier.errors',
+ 'backslash-eof-is-identifier.ref.css',
'border-color.css',
'border-color-currentcolor.css',
'border-color-currentcolor.ref.css',