diff options
author | Explorer09 <explorer09@gmail.com> | 2017-02-03 20:53:24 +0800 |
---|---|---|
committer | Will Estes <westes575@gmail.com> | 2017-02-06 11:37:18 -0500 |
commit | e2d569053ae5359d1d87adf6f72d823a4308ef00 (patch) | |
tree | a977b556ebf2a5c6f0d4718bfc1125c75bacae1d /src/regex.c | |
parent | 3c0ccc45203b19335e6523ec37c82369eff77dda (diff) |
scanner: fix regcomp's error reporting, double malloc.
Fix unneeded double malloc - let regerror(). Write its message after
our "regcomp for (regex) failed: " string.
Also, errbuf cannot be free()'d because of flexfatal containing a
longjmp.
Diffstat (limited to 'src/regex.c')
-rw-r--r-- | src/regex.c | 18 |
1 files changed, 7 insertions, 11 deletions
diff --git a/src/regex.c b/src/regex.c index 2eacacc..38e658b 100644 --- a/src/regex.c +++ b/src/regex.c @@ -54,21 +54,17 @@ void flex_regcomp(regex_t *preg, const char *regex, int cflags) memset (preg, 0, sizeof (regex_t)); if ((err = regcomp (preg, regex, cflags)) != 0) { - const size_t errbuf_sz = 200; - char *errbuf, *rxerr; + const size_t errbuf_sz = 200; + char *errbuf; + int n; errbuf = malloc(errbuf_sz * sizeof(char)); if (!errbuf) flexfatal(_("Unable to allocate buffer to report regcomp")); - rxerr = malloc(errbuf_sz * sizeof(char)); - if (!rxerr) - flexfatal(_("Unable to allocate buffer for regerror")); - regerror (err, preg, rxerr, errbuf_sz); - snprintf (errbuf, errbuf_sz, "regcomp for \"%s\" failed: %s", regex, rxerr); - - flexfatal (errbuf); - free(errbuf); - free(rxerr); + n = snprintf(errbuf, errbuf_sz, "regcomp for \"%s\" failed: ", regex); + regerror(err, preg, errbuf+n, errbuf_sz-(size_t)n); + + flexfatal (errbuf); /* never returns - no need to free(errbuf) */ } } |