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.