When my_realloc2() fails in env_expand(), the code jumps to 'leave:' and
returns NULL, but the original input 'in' is never freed (it's only freed
at line 4919 in the success case). Given that callers typically pass it
the direct return of strdup(), it looks like it is expected to always be
freed. This can be backported everywhere.
}
out = my_realloc2(out, out_len + (txt_end - txt_beg) + val_len + 1);
- if (!out)
+ if (!out) {
+ free(in);
goto leave;
+ }
if (txt_end > txt_beg) {
memcpy(out + out_len, txt_beg, txt_end - txt_beg);