svn commit: r267675 - head/lib/libc/regex
Stefan Farfeleder
stefanf at FreeBSD.org
Fri Jun 20 18:23:24 UTC 2014
On Fri, Jun 20, 2014 at 03:29:10PM +0000, Pedro F. Giffuni wrote:
> Author: pfg
> Date: Fri Jun 20 15:29:09 2014
> New Revision: 267675
> URL: http://svnweb.freebsd.org/changeset/base/267675
>
> Log:
> regex: Make use of reallocf().
>
> Use of reallocf is useful in libraries as we are not certain the
> application will exit after NULL.
>
> This somewhat reduces portability but if since you are building
> this as part of libc it is likely you have our non-standard
> reallocf(3) already.
>
> Reviewed by: ache
> MFC after: 5 days
>
> Modified:
> head/lib/libc/regex/regcomp.c
>
> Modified: head/lib/libc/regex/regcomp.c
> ==============================================================================
> --- head/lib/libc/regex/regcomp.c Fri Jun 20 13:26:49 2014 (r267674)
> +++ head/lib/libc/regex/regcomp.c Fri Jun 20 15:29:09 2014 (r267675)
> @@ -1111,7 +1111,7 @@ allocset(struct parse *p)
> {
> cset *cs, *ncs;
>
> - ncs = realloc(p->g->sets, (p->g->ncsets + 1) * sizeof(*ncs));
> + ncs = reallocf(p->g->sets, (p->g->ncsets + 1) * sizeof(*ncs));
> if (ncs == NULL) {
> SETERROR(REG_ESPACE);
> return (NULL);
> @@ -1174,7 +1174,7 @@ CHadd(struct parse *p, cset *cs, wint_t
> if (ch < NC)
> cs->bmp[ch >> 3] |= 1 << (ch & 7);
> else {
> - newwides = realloc(cs->wides, (cs->nwides + 1) *
> + newwides = reallocf(cs->wides, (cs->nwides + 1) *
> sizeof(*cs->wides));
> if (newwides == NULL) {
> SETERROR(REG_ESPACE);
Hi Pedro,
I don't think these changes are OK. If reallocf() fails here, the
cs->wides pointer will be freed and later freeset() will call
free(cs->wides), probably crashing. The other cases are most probably
similar though I haven't examined them closely.
BR,
Stefan
More information about the svn-src-head
mailing list