mirror of
https://github.com/flatpak/flatpak.git
synced 2026-10-28 02:20:18 -04:00
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:
1 parent
ffcb20f781
commit
9cd0ef4b0b
2 files changed
+17
-2
No files matched your search
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in new issue
Block a user