Am 17.11.2015 um 10:38 schrieb Jeffrey Walton:
>
>>     My question is, how can we craft a test case to tickle that finding?
>>
>     I've looked at the issue and my conclusion is that the system is
>     making a mistake (may be wrong though).
>
>     It assumes that t1 may get up to 63 in step 27, it then goes
>     through a standard-for-loop, noticing that j=0 < 1 = 64 - 63 in
>     step 28 and 29, meaning we get back to the start of the loop (step
>     30) but now we increment to j=1 (step 31) and check if j = 1 < 1 =
>     64 - 63 (step 32), which is obviously false, so t1 + j couldn't
>     get 63 + 1 (which results undefined behavior) but only 63 + 0
>     (which is allowed).
>
> OK, thanks. I'm still not clear on it. Its not your analysis, my
> analysis or Coverity's analysis... Its simply error'ing on the side of
> caution.
>
> Here's what we are interested int:
>
>         for (unsigned int j=0; j<WORD_BITS-t1; j++)
>                 temp ^= ((temp >> j) & 1) << (t1 + j);
>
> temp ^= ((temp >> j) & 1) << (t1 + j) reduces to:
>
>         x << (t1 + j);
>
> Here's the equality we are interested in:
>
>         (t1 + j) < WORD_BITS-t1
close. We're interested in t1 + j < WORD_BITS and we know t1 +
(WORD_BITS-1) - t < WORD_BITS (from j<WORD_BITS-t1 <=>
j<=WORD_BITS-1-t1), which is obviously always true. (Again: only AFAICT)
>
> And it must be less than WORD_BITS. So we should be able to assert on:
>
>         2 * t1 + j < WORD_BITS
if you want to assert, why not t1 + j < WORD_BITS (as coverity suggests).

As to more properly show why the 2*t1 is false here, simply plug-in
t1=32 and j=0, this will trigger your assert, but t1+ j clearly is
smaller than 64 meaning we're not experiencing undefined behavior.

BR

JPM
>
> Does that sound about right?
>
> Jeff
> -- 
> -- 
> You received this message because you are subscribed to the "Crypto++
> Users" Google Group.
> To unsubscribe, send an email to
> cryptopp-users-unsubscr...@googlegroups.com.
> More information about Crypto++ and this group is available at
> http://www.cryptopp.com.
> ---
> You received this message because you are subscribed to the Google
> Groups "Crypto++ Users" group.
> To unsubscribe from this group and stop receiving emails from it, send
> an email to cryptopp-users+unsubscr...@googlegroups.com
> <mailto:cryptopp-users+unsubscr...@googlegroups.com>.
> For more options, visit https://groups.google.com/d/optout.

-- 
-- 
You received this message because you are subscribed to the "Crypto++ Users" 
Google Group.
To unsubscribe, send an email to cryptopp-users-unsubscr...@googlegroups.com.
More information about Crypto++ and this group is available at 
http://www.cryptopp.com.
--- 
You received this message because you are subscribed to the Google Groups 
"Crypto++ Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to cryptopp-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to