Give match data memory failur in regcomp() instead of regexec()

This commit is contained in:
Philip.Hazel 2015-11-12 18:35:49 +00:00
parent 8d70b1d368
commit 2f8febd4b1
3 changed files with 30 additions and 17 deletions

View File

@ -293,6 +293,9 @@ a factor of the size of the compiling workspace (it currently is).
86. Avoid the possibility of computing with an out-of-bounds pointer (though 86. Avoid the possibility of computing with an out-of-bounds pointer (though
not dereferencing it) while handling lookbehind assertions. not dereferencing it) while handling lookbehind assertions.
87. Failure to get memory for the match data in regcomp() is now given as a
regcomp() error instead of waiting for regexec() to pick it up.
Version 10.20 30-June-2015 Version 10.20 30-June-2015
-------------------------- --------------------------

View File

@ -231,6 +231,13 @@ if (preg->re_pcre2_code == NULL)
preg->re_nsub = (size_t)re_nsub; preg->re_nsub = (size_t)re_nsub;
if ((options & PCRE2_NO_AUTO_CAPTURE) != 0) re_nsub = -1; if ((options & PCRE2_NO_AUTO_CAPTURE) != 0) re_nsub = -1;
preg->re_match_data = pcre2_match_data_create(re_nsub + 1, NULL); preg->re_match_data = pcre2_match_data_create(re_nsub + 1, NULL);
if (preg->re_match_data == NULL)
{
pcre2_code_free(preg->re_pcre2_code);
return REG_ESPACE;
}
return 0; return 0;
} }

View File

@ -4597,6 +4597,9 @@ if ((pat_patctl.control & CTL_POSIX) != 0)
{ {
size_t bsize, usize; size_t bsize, usize;
preg.re_pcre2_code = NULL; /* In case something was left in there */
preg.re_match_data = NULL;
bsize = (pat_patctl.regerror_buffsize != 0)? bsize = (pat_patctl.regerror_buffsize != 0)?
pat_patctl.regerror_buffsize : pbuffer8_size; pat_patctl.regerror_buffsize : pbuffer8_size;
if (bsize + 8 < pbuffer8_size) if (bsize + 8 < pbuffer8_size)