Skip to content
Snippets Groups Projects
Commit f30df350 authored by Deucе's avatar Deucе :ok_hand_tone4:
Browse files

Fix memory leak on realloc failure in xp_aprintf_next()

The caller of this function must clobber the passed in pointer,
and we're returning NULL meaning we would be overwriting the pointer
to the allocation.
parent 33fc557d
Branches
Tags
1 merge request!455Update branch with changes from master
...@@ -388,8 +388,10 @@ char* xp_asprintf_next(char *format, int type, ...) ...@@ -388,8 +388,10 @@ char* xp_asprintf_next(char *format, int type, ...)
*/ */
offset2=p-format; offset2=p-format;
newbuf=(char *)realloc(format, format_len+i-1 /* -1 for the '*' that's already there */); newbuf=(char *)realloc(format, format_len+i-1 /* -1 for the '*' that's already there */);
if(newbuf==NULL) if(newbuf==NULL) {
free(format);
return(NULL); return(NULL);
}
format=newbuf; format=newbuf;
p=format+offset2; p=format+offset2;
/* /*
...@@ -427,8 +429,10 @@ char* xp_asprintf_next(char *format, int type, ...) ...@@ -427,8 +429,10 @@ char* xp_asprintf_next(char *format, int type, ...)
*/ */
offset2=p-format; offset2=p-format;
newbuf=(char *)realloc(format, format_len+i-1 /* -1 for the '*' that's already there */); newbuf=(char *)realloc(format, format_len+i-1 /* -1 for the '*' that's already there */);
if(newbuf==NULL) if(newbuf==NULL) {
free(format);
return(NULL); return(NULL);
}
format=newbuf; format=newbuf;
p=format+offset2; p=format+offset2;
/* /*
...@@ -1230,6 +1234,7 @@ char* xp_asprintf_next(char *format, int type, ...) ...@@ -1230,6 +1234,7 @@ char* xp_asprintf_next(char *format, int type, ...)
newbuf=(char *)realloc(format, format_len-this_format_len+j); newbuf=(char *)realloc(format, format_len-this_format_len+j);
if(newbuf==NULL) { if(newbuf==NULL) {
FREE_AND_NULL(entry); FREE_AND_NULL(entry);
free(format);
return(NULL); return(NULL);
} }
format=newbuf; format=newbuf;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment