In reallocf(3), free the memory only when size != 0. Otherwise, when the
System V compatibility option (malloc "V" flag) is in effect a zero sized reallocf() could cause a double free. PR: bin/141753 Submitted by: Dan Lukes
This commit is contained in:
parent
acf511e4d0
commit
c5a3b40d67
@ -35,7 +35,14 @@ reallocf(void *ptr, size_t size)
|
||||
void *nptr;
|
||||
|
||||
nptr = realloc(ptr, size);
|
||||
if (!nptr && ptr)
|
||||
|
||||
/*
|
||||
* When the System V compatibility option (malloc "V" flag) is
|
||||
* in effect, realloc(ptr, 0) frees the memory and returns NULL.
|
||||
* So, to avoid double free, call free() only when size != 0.
|
||||
* realloc(ptr, 0) can't fail when ptr != NULL.
|
||||
*/
|
||||
if (!nptr && ptr && size != 0)
|
||||
free(ptr);
|
||||
return (nptr);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user