https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118500
Bug ID: 118500
Summary: no diagnostics with strsep(3) and
[[gnu::malloc(free)]] attribute
Product: gcc
Version: 15.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: alx at kernel dot org
Target Milestone: ---
I think it's -Wfree-nonheap-object which should control this.
strsep(3) takes the address of the pointer and modifies it (unless it was
NULL).
The analyzer should expect that this results in a bogus free(3) call.
alx@devuan:~/tmp/gcc$ cat strsep2.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
[[gnu::malloc(free)]]
char *my_strdup(const char *s)
{
return strdup(s);
}
[[gnu::noipa]]
int
g(void)
{
char *s;
s = my_strdup("f,oo");
if (s == NULL)
return -1;
strsep(&s, ",");
puts(s);
free(s);
return 0;
}
int
main(void)
{
return g();
}
alx@devuan:~/tmp/gcc$ gcc-15 -Wall -Wextra -fanalyzer -O3 strsep2.c
alx@devuan:~/tmp/gcc$ ./a.out
oo
free(): invalid pointer
Aborted