diff --git a/common/flatpak-utils.c b/common/flatpak-utils.c index 4d55212e8..042015263 100644 --- a/common/flatpak-utils.c +++ b/common/flatpak-utils.c @@ -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) diff --git a/tests/testcommon.c b/tests/testcommon.c index 89942525c..c3b531b02 100644 --- a/tests/testcommon.c +++ b/tests/testcommon.c @@ -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);