utils: Avoid corrupting our output if an invalid glob is not UTF-8

Signed-off-by: Simon McVittie <smcv@collabora.com>
This commit is contained in:
Simon McVittie committed 2026-08-21 16:07:48 +00:00
1 parent ffcb20f781
commit 9cd0ef4b0b
2 files changed
+17 -2

No files matched your search

+6 -2
View File
@@ -742,7 +742,6 @@ flatpak_filter_glob_to_regexp (const char *glob,
while (*glob != 0)
{
char c = *glob;
glob++;
if (c == '/')
{
@@ -774,9 +773,14 @@ flatpak_filter_glob_to_regexp (const char *glob,
}
else
{
flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Invalid glob character '%c'"), c);
g_autofree char *first = flatpak_describe_invalid_first_char (glob);
flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Invalid glob character '%s'"),
first);
return NULL;
}
glob++;
}
while (parts < 3)
+11
View File
@@ -834,6 +834,14 @@ test_filter_parser (void)
"deny *\n"
"allow org.foo.bar extra\n",
FLATPAK_ERROR_INVALID_DATA
},
{
"deny \xf0\x9f\x98\xb9",
FLATPAK_ERROR_INVALID_DATA
},
{
"deny \xff",
FLATPAK_ERROR_INVALID_DATA
}
};
gboolean ret;
@@ -841,12 +849,15 @@ test_filter_parser (void)
for (i = 0; i < G_N_ELEMENTS(filters); i++)
{
g_autofree char *escaped = flatpak_escape_string (filters[i].filter, FLATPAK_ESCAPE_DO_NOT_QUOTE);
g_autoptr(GError) error = NULL;
g_autoptr(GRegex) allow_refs = NULL;
g_autoptr(GRegex) deny_refs = NULL;
ret = flatpak_parse_filters (filters[i].filter, &allow_refs, &deny_refs, &error);
g_assert_error (error, FLATPAK_ERROR, filters[i].expected_error);
g_test_message ("Invalid filter \"%s\" -> %s", escaped, error->message);
g_assert_true (g_utf8_validate (error->message, -1, NULL));
g_assert_true (ret == FALSE);
g_assert_true (allow_refs == NULL);
g_assert_true (deny_refs == NULL);