This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH v3] tftp.h: rework layout to work with fortification


On Monday 07 May 2012 22:10:13 Carlos O'Donell wrote:
> On Mon, May 7, 2012 at 7:04 PM, Mike Frysinger wrote:
> > On Monday 07 May 2012 11:52:18 Carlos O'Donell wrote:
> >> On Mon, May 7, 2012 at 11:51 AM, Joseph S. Myers wrote:
> >> > On Mon, 7 May 2012, Carlos O'Donell wrote:
> >> >> On Mon, May 7, 2012 at 10:38 AM, Joseph S. Myers wrote:
> >> >> > On Mon, 7 May 2012, Carlos O'Donell wrote:
> >> >> >> It still doesn't work with -Wall -Werror -pedantic because zero
> >> >> >> sized arrays are not allowed in ISO C.
> >> >> > 
> >> >> > This should not give errors in system headers.  Have you found such
> >> >> > an error with the header installed in a system header directory?
> >> >> >  If so, that would be a GCC bug.
> >> >> 
> >> >> No, I haven't tried installing this and testing.
> >> >> 
> >> >> I didn't know that GCC had special handling for system headers.
> >> >> 
> >> >> How does that work?
> >> > 
> >> > Most warnings are not emitted for locations in system headers (those
> >> > found in system header directories, with -isystem or marked with
> >> > #pragma GCC system_header), unless -Wsystem-headers.  This applies
> >> > before pedwarns are turned into errors.
> >> 
> >> Thanks, I wasn't aware of this special handling.
> >> 
> >> In that case if Mike can show that the installed header works with
> >> -Werror -Wall -pedantic then I'm happy with the final version.
> > 
> > $ echo '#include <arpa/tftp.h>' | gcc -x c -c - -Werror -Wall -pedantic
> > $ echo $?
> > 0
> 
> That's good enough for me.

OK, pushed then

> > $ echo '#include <arpa/tftp.h>' | gcc -E -dD - | sed -n '/^struct
> > tftphdr/,/^}/p' struct tftphdr {
> >  short th_opcode;
> >  union {
> >  char tu_padding[3];
> >  struct {
> >   union {
> >    unsigned short tu_block;
> >    short tu_code;
> >   } __attribute__ ((__packed__)) th_u3;
> >   char tu_data[0];
> >  } __attribute__ ((__packed__)) th_u2;
> >  char tu_stuff[0];
> >  } __attribute__ ((__packed__)) th_u1;
> > } __attribute__ ((__packed__));
> > 
> > i would have used flexible arrays but gcc doesn't allow those in unions:
> > tftp.h:60:8: error: flexible array member in union
> 
> I know, that would have been the best solution. You should file an
> upstream enhancement request for this.

seems this behavior is what ISO C99 wants ?
http://gcc.gnu.org/onlinedocs/gcc-4.7.0/gcc/Zero-Length.html
-mike

Attachment: signature.asc
Description: This is a digitally signed message part.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]