Message ID | 20170724182751.18261-4-f4bug@amsat.org |
---|---|
State | New |
Headers | show |
On 07/24/2017 01:27 PM, Philippe Mathieu-Daudé wrote: > thunk.c:91:32: warning: Call to 'malloc' has an allocation size of 0 bytes > se->field_offsets[i] = malloc(nb_fields * sizeof(int)); > ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > > Reported-by: Clang Static Analyzer > Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> > --- > thunk.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) Better would be fixing the code to use g_new0, and the corresponding free.
On 24 July 2017 at 19:27, Philippe Mathieu-Daudé <f4bug@amsat.org> wrote: > thunk.c:91:32: warning: Call to 'malloc' has an allocation size of 0 bytes > se->field_offsets[i] = malloc(nb_fields * sizeof(int)); > ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > > Reported-by: Clang Static Analyzer > Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> > --- > thunk.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/thunk.c b/thunk.c > index 2dac36666d..d1c5e221f5 100644 > --- a/thunk.c > +++ b/thunk.c > @@ -67,7 +67,6 @@ void thunk_register_struct(int id, const char *name, const argtype *types) > int nb_fields, offset, max_align, align, size, i, j; > > assert(id < max_struct_entries); > - se = struct_entries + id; > > /* first we count the number of fields */ > type_ptr = types; > @@ -76,6 +75,10 @@ void thunk_register_struct(int id, const char *name, const argtype *types) > type_ptr = thunk_type_next(type_ptr); > nb_fields++; > } > + if (!nb_fields) { > + return; > + } Can this ever actually happen? We only call this function for a fixed set of known-at-compile-time data (it's invoked by all the STRUCT() macro uses). It seems likely that it would be better to make this an assert() and check that none of our uses of STRUCT() cause it to fire. > + se = struct_entries + id; > se->field_types = types; > se->nb_fields = nb_fields; > se->name = name; > -- > 2.13.3 > thanks -- PMM
On 07/24/2017 03:37 PM, Eric Blake wrote: > On 07/24/2017 01:27 PM, Philippe Mathieu-Daudé wrote: >> thunk.c:91:32: warning: Call to 'malloc' has an allocation size of 0 bytes >> se->field_offsets[i] = malloc(nb_fields * sizeof(int)); >> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> >> Reported-by: Clang Static Analyzer >> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> >> --- >> thunk.c | 5 ++++- >> 1 file changed, 4 insertions(+), 1 deletion(-) > > Better would be fixing the code to use g_new0, and the corresponding free. Ok, for 2.11 although (not a fix). Also thunk* alloc'd are never free'd during process lifetime, so will keep like that (no g_free).
diff --git a/thunk.c b/thunk.c index 2dac36666d..d1c5e221f5 100644 --- a/thunk.c +++ b/thunk.c @@ -67,7 +67,6 @@ void thunk_register_struct(int id, const char *name, const argtype *types) int nb_fields, offset, max_align, align, size, i, j; assert(id < max_struct_entries); - se = struct_entries + id; /* first we count the number of fields */ type_ptr = types; @@ -76,6 +75,10 @@ void thunk_register_struct(int id, const char *name, const argtype *types) type_ptr = thunk_type_next(type_ptr); nb_fields++; } + if (!nb_fields) { + return; + } + se = struct_entries + id; se->field_types = types; se->nb_fields = nb_fields; se->name = name;
thunk.c:91:32: warning: Call to 'malloc' has an allocation size of 0 bytes se->field_offsets[i] = malloc(nb_fields * sizeof(int)); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Reported-by: Clang Static Analyzer Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> --- thunk.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)