summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorExplorer09 <explorer09@gmail.com>2017-02-03 20:53:24 +0800
committerWill Estes <westes575@gmail.com>2017-02-06 11:37:18 -0500
commite2d569053ae5359d1d87adf6f72d823a4308ef00 (patch)
treea977b556ebf2a5c6f0d4718bfc1125c75bacae1d /src
parent3c0ccc45203b19335e6523ec37c82369eff77dda (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')
-rw-r--r--src/regex.c18
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) */
}
}