[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] libxc/pm: Fix NULL pointer checks.



Ian Campbell writes ("Re: [Xen-devel] [PATCH] libxc/pm: Fix NULL pointer 
checks."):
> On Tue, 2013-09-10 at 13:23 +0100, Jan Beulich wrote:
> > I'm very surprised the compiler didn't reject this - I'm unaware of
> > an extension that would allow pointers to be compared by other
> > than == and != (plus it's all but clear what e.g. a "negative"
> > pointer really is).

It is legal to compare for inequality[1] pointers into the same object.
However, it is not legal to compare for inequality any null pointer;
doing so is undefined behaviour.  C99 6.5.8(5).

> We were just discussing this at lunch and couldn't work it out either,
> but indeed both gcc 4.7.[23] and clang 3.2 accept this when building
> with -Wall:
> int main(int argc, char **argv)
> {
>       if ( argv[1] < 0 )
>               printf("ARGV[1] < 0\n");
>       else
>               printf("ARGV[1] >= 0\n");
>       return 0;

I think it would be legal for this program to be compiled into
 #!/bin/sh
 echo hahahah

In the future, I wouldn't be surprised if a compiler were to
maliciously optimise away the test and one of the arms, or perhaps the
whole of the function.

Ian.

[1] < > <= >= are inequalities.  == and != are not.

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.