On 11/17/13 15:02, Florian Weimer wrote:
* Jonathan Wakely:

On 17 November 2013 18:25, Dominic News wrote:
In the following code (from xorg-server)

     if (a == 0)
         addr = 0;
     (...)
     memset(addr, '\0', a);

the path for a==0 is turned into a trap by -fisolate-erroneous-paths. (Is
calling memset like this undefined behaviour?)

Yes. 7.23.1 in the C standard says that even with a zero size the
pointer argument must be valid.

Is this new in C11?  Does it apply to functions such as strnlen as well?
No, it's C99 I think. There was a clarification which came in after C99 which clarified that even if the length is zero, the pointers must still be valid.

The language is such that unless there's an explicit exception for a particular function, those rules always apply.

jeff

Reply via email to