mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-12-27 07:56:14 +01:00
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.
This commit is contained in:
parent
1d628dac92
commit
11521972f4
@ -1027,7 +1027,7 @@ g_match_info_next (GMatchInfo *match_info,
|
|||||||
{
|
{
|
||||||
gint prev_match_start;
|
gint prev_match_start;
|
||||||
gint prev_match_end;
|
gint prev_match_end;
|
||||||
gint opts;
|
uint32_t opts;
|
||||||
|
|
||||||
g_return_val_if_fail (match_info != NULL, FALSE);
|
g_return_val_if_fail (match_info != NULL, FALSE);
|
||||||
g_return_val_if_fail (error == NULL || *error == 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));
|
match_info->regex->pattern, match_error (match_info->matches));
|
||||||
return FALSE;
|
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)
|
else if (match_info->matches == PCRE2_ERROR_NOMATCH)
|
||||||
{
|
{
|
||||||
/* We're done with this match info */
|
/* We're done with this match info */
|
||||||
|
Loading…
Reference in New Issue
Block a user