Possible bugs due to: warning: XXX may be used uninitialized in this function

Tomas Carnecky tom at dbservice.com
Sun Feb 1 17:35:54 PST 2009


While trying to fix some of the warnings that gcc generates when 
compiling the xserver, I came across two which appear to be real bugs. 
Since they don't appear to be trivial to fix, I'm posting them here for 
further review:


Xi/setbmap.c:110 in ProcXSetDeviceButtonMapping()
http://cgit.freedesktop.org/xorg/xserver/tree/Xi/setbmap.c#n110

'DeviceIntPtr dev' seems indeed uninitialized and is passed to 
ApplyPointerMapping().


hw/xfree86/common/xf86Bus.c:2171 in x_isSubsetOf()
http://cgit.freedesktop.org/xorg/xserver/tree/hw/xfree86/common/xf86Bus.c#n2171

This one is a bit more complicated due to the use of macros, I'll list 
the relevant ones here:

typedef struct {
     unsigned long type;
     memType a;
     memType b;
} resRange, *resList;

#define RANGE(r,u,v,t) {\
                        (r).a = (u);\
                        (r).b = (v);\
                        (r).type = (t);\
                        }

#define rBase a
#define rMask b
#define rBegin a
#define rEnd b

The function uses 'range1.a' without having touched it anywhere before:

RANGE(range1, ((range.rBase & list->sparse_base)
     | (range.rBase & ~list->sparse_mask)
     | ((~list->sparse_base & list->sparse_mask)
         & ~range.rMask)) & range1.rMask,
                            ^^^^^^^^^^^^
     ((range.rMask | list->sparse_mask) & ~test)
     | (1 << i), range.type);


tom




More information about the xorg mailing list