1b5975d6bSopenharmony_ciFrom c05d09044fb71bdea599c81bf0ae896a5503e76a Mon Sep 17 00:00:00 2001 2b5975d6bSopenharmony_ciFrom: Marco Trevisan <mail@3v1n0.net> 3b5975d6bSopenharmony_ciDate: Fri, 15 Jul 2022 01:27:33 +0200 4b5975d6bSopenharmony_ciSubject: [PATCH] gregex: Ensure we translate the errcode without asserting on 5b5975d6bSopenharmony_ci G_REGEX_ERROR_COMPILE 6b5975d6bSopenharmony_ci 7b5975d6bSopenharmony_ciSince commit 8d5a44dc in order to ensure that we were setting the errcode in 8b5975d6bSopenharmony_citranslate_compile_error(), we did an assert checking whether it was a 9b5975d6bSopenharmony_civalid value, but we assumed that 0 was not a valid error, while it is as 10b5975d6bSopenharmony_ciit's the generic G_REGEX_ERROR_COMPILE. 11b5975d6bSopenharmony_ci 12b5975d6bSopenharmony_ciSo, set errcode and errmsg to invalid values before translating and 13b5975d6bSopenharmony_ciensure we've change them. 14b5975d6bSopenharmony_ci 15b5975d6bSopenharmony_ciFixes: #2694 16b5975d6bSopenharmony_ci 17b5975d6bSopenharmony_ciConflict:NA 18b5975d6bSopenharmony_ciReference:https://gitlab.gnome.org/GNOME/glib/-/commit/c05d09044fb71bdea599c81bf0ae896a5503e76a 19b5975d6bSopenharmony_ci 20b5975d6bSopenharmony_ci--- 21b5975d6bSopenharmony_ci glib/gregex.c | 8 ++++++-- 22b5975d6bSopenharmony_ci glib/tests/regex.c | 13 +++++++++++++ 23b5975d6bSopenharmony_ci 2 files changed, 19 insertions(+), 2 deletions(-) 24b5975d6bSopenharmony_ci 25b5975d6bSopenharmony_cidiff --git a/glib/gregex.c b/glib/gregex.c 26b5975d6bSopenharmony_ciindex 5fc7b16bc8..2a54929bf4 100644 27b5975d6bSopenharmony_ci--- a/glib/gregex.c 28b5975d6bSopenharmony_ci+++ b/glib/gregex.c 29b5975d6bSopenharmony_ci@@ -476,8 +476,12 @@ translate_compile_error (gint *errcode, const gchar **errmsg) 30b5975d6bSopenharmony_ci * Note that there can be more PCRE errors with the same GRegexError 31b5975d6bSopenharmony_ci * and that some PCRE errors are useless for us. 32b5975d6bSopenharmony_ci */ 33b5975d6bSopenharmony_ci+ gint original_errcode = *errcode; 34b5975d6bSopenharmony_ci 35b5975d6bSopenharmony_ci- switch (*errcode) 36b5975d6bSopenharmony_ci+ *errcode = -1; 37b5975d6bSopenharmony_ci+ *errmsg = NULL; 38b5975d6bSopenharmony_ci+ 39b5975d6bSopenharmony_ci+ switch (original_errcode) 40b5975d6bSopenharmony_ci { 41b5975d6bSopenharmony_ci case PCRE2_ERROR_END_BACKSLASH: 42b5975d6bSopenharmony_ci *errcode = G_REGEX_ERROR_STRAY_BACKSLASH; 43b5975d6bSopenharmony_ci@@ -725,7 +729,7 @@ translate_compile_error (gint *errcode, const gchar **errmsg) 44b5975d6bSopenharmony_ci break; 45b5975d6bSopenharmony_ci } 46b5975d6bSopenharmony_ci 47b5975d6bSopenharmony_ci- g_assert (*errcode != 0); 48b5975d6bSopenharmony_ci+ g_assert (*errcode != -1); 49b5975d6bSopenharmony_ci g_assert (*errmsg != NULL); 50b5975d6bSopenharmony_ci } 51b5975d6bSopenharmony_ci 52b5975d6bSopenharmony_cidiff --git a/glib/tests/regex.c b/glib/tests/regex.c 53b5975d6bSopenharmony_ciindex 3355f64e54..9a1977b248 100644 54b5975d6bSopenharmony_ci--- a/glib/tests/regex.c 55b5975d6bSopenharmony_ci+++ b/glib/tests/regex.c 56b5975d6bSopenharmony_ci@@ -2187,6 +2187,18 @@ pcre2_ge (guint64 major, guint64 minor) 57b5975d6bSopenharmony_ci return (pcre2_major > major) || (pcre2_major == major && pcre2_minor >= minor); 58b5975d6bSopenharmony_ci } 59b5975d6bSopenharmony_ci 60b5975d6bSopenharmony_ci+static void 61b5975d6bSopenharmony_ci+test_compile_errors (void) 62b5975d6bSopenharmony_ci+{ 63b5975d6bSopenharmony_ci+ GRegex *regex; 64b5975d6bSopenharmony_ci+ GError *error = NULL; 65b5975d6bSopenharmony_ci+ 66b5975d6bSopenharmony_ci+ regex = g_regex_new ("\\o{999}", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, &error); 67b5975d6bSopenharmony_ci+ g_assert_null (regex); 68b5975d6bSopenharmony_ci+ g_assert_error (error, G_REGEX_ERROR, G_REGEX_ERROR_COMPILE); 69b5975d6bSopenharmony_ci+ g_clear_error (&error); 70b5975d6bSopenharmony_ci+} 71b5975d6bSopenharmony_ci+ 72b5975d6bSopenharmony_ci int 73b5975d6bSopenharmony_ci main (int argc, char *argv[]) 74b5975d6bSopenharmony_ci { 75b5975d6bSopenharmony_ci@@ -2204,6 +2216,7 @@ main (int argc, char *argv[]) 76b5975d6bSopenharmony_ci g_test_add_func ("/regex/multiline", test_multiline); 77b5975d6bSopenharmony_ci g_test_add_func ("/regex/explicit-crlf", test_explicit_crlf); 78b5975d6bSopenharmony_ci g_test_add_func ("/regex/max-lookbehind", test_max_lookbehind); 79b5975d6bSopenharmony_ci+ g_test_add_func ("/regex/compile-errors", test_compile_errors); 80b5975d6bSopenharmony_ci 81b5975d6bSopenharmony_ci /* TEST_NEW(pattern, compile_opts, match_opts) */ 82b5975d6bSopenharmony_ci G_GNUC_BEGIN_IGNORE_DEPRECATIONS 83b5975d6bSopenharmony_ci-- 84b5975d6bSopenharmony_ciGitLab 85b5975d6bSopenharmony_ci 86