52 lines
1.8 KiB
Diff
52 lines
1.8 KiB
Diff
From 11521972f4d345d9a3f68df719f5980085197e47 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= <mail@3v1n0.net>
|
|
Date: Tue, 6 Sep 2022 18:26:12 +0200
|
|
Subject: [PATCH] gregex: Handle the case we need to re-allocate the match data
|
|
|
|
In case PCRE2 returns an empty match
|
|
|
|
This can be easily tested by initializing the initial match data to a
|
|
value that is less than the expected match values (e.g. by calling
|
|
pcre2_match_data_create (1, NULL)), but we can't do it in our tests
|
|
without bigger changes.
|
|
---
|
|
glib/gregex.c | 15 ++++++++++++++-
|
|
1 file changed, 14 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/glib/gregex.c b/glib/gregex.c
|
|
index b886b24e2a..84c4245753 100644
|
|
--- a/glib/gregex.c
|
|
+++ b/glib/gregex.c
|
|
@@ -1027,7 +1027,7 @@ g_match_info_next (GMatchInfo *match_info,
|
|
{
|
|
gint prev_match_start;
|
|
gint prev_match_end;
|
|
- gint opts;
|
|
+ uint32_t opts;
|
|
|
|
g_return_val_if_fail (match_info != NULL, FALSE);
|
|
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
|
|
@@ -1075,6 +1075,19 @@ g_match_info_next (GMatchInfo *match_info,
|
|
match_info->regex->pattern, match_error (match_info->matches));
|
|
return FALSE;
|
|
}
|
|
+ else if (match_info->matches == 0)
|
|
+ {
|
|
+ /* info->offsets is too small. */
|
|
+ match_info->n_offsets *= 2;
|
|
+ match_info->offsets = g_realloc_n (match_info->offsets,
|
|
+ match_info->n_offsets,
|
|
+ sizeof (gint));
|
|
+
|
|
+ pcre2_match_data_free (match_info->match_data);
|
|
+ match_info->match_data = pcre2_match_data_create (match_info->n_offsets, NULL);
|
|
+
|
|
+ return g_match_info_next (match_info, error);
|
|
+ }
|
|
else if (match_info->matches == PCRE2_ERROR_NOMATCH)
|
|
{
|
|
/* We're done with this match info */
|
|
--
|
|
GitLab
|
|
|