svn commit: r267675 - head/lib/libc/regex

Pedro Giffuni pfg at FreeBSD.org
Fri Jun 20 19:03:35 UTC 2014


El 6/20/2014 1:23 PM, Stefan Farfeleder escribió:
> 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.
>

Ugh .. I think you are right. Let me check and I will revert as necessary.

Pedro.




More information about the svn-src-head mailing list