[patch] bus error in gcry_free

Werner Koch wk at gnupg.org
Thu Feb 1 16:55:00 CET 2007


On Thu,  1 Feb 2007 16:24, christianbiere at gmx.de said:

>>   return (pool_okay
>>           && p >= pool
>>           && p < (const void*)((const char*)pool+pool_size));
>> 
>
> If p points into the pool or just one byte after it, everything is fine and
> well-defined. Otherwise, the behaviour of this code is completely undefined.
> A compile may optimize this into this:
>
>    return pool_okay && p != (const void*)((const char*)pool+pool_size);

Sorry, I may be temporary blind but I can't see how you come to this
conclusion.  What is wrong with:

  (const void*) ((const char*)pool + pool_size)
                 =================   =========
                  So that we can     And add the size
                  do pointer         of the pool
                  arithmetics
                ================================
                Yielding a pointer right behind POOL
  ==================================================
  Casting it to void* for proper comparing against P

?  How can the comparison be optimized away?


> Then you've been GCCed. pointer arithmetic with "void *" is not covered by
> any C standard and usually GCC warns about this.

Damned, forgot to enable the extra gcc warnings.  I knew that there
must have been some reason that I originally casted it.  That happens if
you rely too much on warnings :-(


Salam-Shalom,

   Werner




More information about the Gcrypt-devel mailing list