[Spice-devel] [spice-server] stat: Silence gcc warning

Frediano Ziglio fziglio at redhat.com
Mon Jan 23 10:39:25 UTC 2017


> 
> On 01/20/2017 05:30 PM, Christophe Fergeau wrote:
> > Initializing 'node' to NULL silences this warning:
> >
> > stat-file.c: In function 'stat_file_add_node':
> > stat-file.c:180:15: error: 'node' may be used uninitialized in this
> > function [-Werror=maybe-uninitialized]
> >      g_strlcpy(node->name, name, sizeof(node->name));
> >                ^~~~
> > cc1: all warnings being treated as errors
> 
> Hi Christophe,
> 
> Looks good to me.
> 

it's actually a false positive, from 

    for (ref = 0; ref <= stat_file->max_nodes; ref++) {
        node = &stat_file->stat->nodes[ref];

node is always initialized as ref and max_nodes are unsigned so
at the beginning ref == 0 and start_file->max_nodes >= 0 so
ref <= 0 <= start_file->max_nodes and node is initialized.

> Some comments:
> 1. It would be nice to (unlock and) return if node == NULL below.

as said node cannot be NULL and by the way if it was NULL node->value
would crash so return is not reached.

> 2. (In the area) the check for  (stat_file->stat == NULL) should
>     be before the while

agreed, I would put 

    if (stat_file->stat == NULL || strlen(name) >= sizeof(node->name)) {
        return INVALID_STAT_REF;
    }   

stat_file->stat is used just after the lock.

> 3. For some reason the build does not fail for me (again :-()
> 
> If you want I can send patch(es) for 1 and 2
> 
> Thanks,
>      Uri.
> 

Frediano

> 
> > ---
> >  server/stat-file.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/server/stat-file.c b/server/stat-file.c
> > index c23f4f5..de455b6 100644
> > --- a/server/stat-file.c
> > +++ b/server/stat-file.c
> > @@ -144,7 +144,7 @@ StatNodeRef
> >  stat_file_add_node(RedStatFile *stat_file, StatNodeRef parent, const char
> >  *name, int visible)
> >  {
> >      StatNodeRef ref;
> > -    SpiceStatNode *node;
> > +    SpiceStatNode *node = NULL;
> >
> >      spice_assert(name && strlen(name) > 0);
> >      if (strlen(name) >= sizeof(node->name)) {
> >



More information about the Spice-devel mailing list