ccomps: fix dangling pointer use
On Ubuntu 23.10, the compiler notices:
ccomps.c: In function 'gwrite':
ccomps.c:306:13: warning: dangling pointer to 'name' may be used [-Wdangling-pointer=]
306 | free(name);
| ^~~~~~~~~~
ccomps.c:278:12: note: 'name' declared here
278 | agxbuf name = {0};
| ^~~~
In file included from /usr/include/stdio.h:964,
from ccomps.c:23:
In function 'fprintf',
inlined from 'gwrite' at ccomps.c:304:6:
/usr/include/x86_64-linux-gnu/bits/stdio2.h:79:10: warning: dangling pointer to 'name' may be used [-Wdangling-pointer=]
79 | return __fprintf_chk (__stream, __USE_FORTIFY_LEVEL - 1, __fmt,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
80 | __va_arg_pack ());
| ~~~~~~~~~~~~~~~~~
ccomps.c: In function 'gwrite':
ccomps.c:278:12: note: 'name' declared here
278 | agxbuf name = {0};
| ^~~~
ccomps.c:309:9: warning: dangling pointer to 'name' may be used [-Wdangling-pointer=]
309 | free(name);
| ^~~~~~~~~~
ccomps.c:278:12: note: 'name' declared here
278 | agxbuf name = {0};
| ^~~~
ccomps.c:302:16: warning: dangling pointer to 'name' may be used [-Wdangling-pointer=]
302 | outf = fopen(name, "w");
| ^~~~~~~~~~~~~~~~
ccomps.c:278:12: note: 'name' declared here
278 | agxbuf name = {0};
| ^~~~
The problem is that getName
was returning a pointer to a buffer that is not
necessarily heap-allocated. The subsequent free
calls would corrupt the heap
in this case. This bug was introduced in
453d098d.