https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88673
Bug ID: 88673
Summary: Overflowed array index read error
Product: gcc
Version: 6.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libstdc++
Assignee: unassigned at gcc dot gnu.org
Reporter: venkateshprabu at gmail dot com
Target Milestone: ---
https://github.com/gcc-mirror/gcc/blob/gcc-6_2_0-release/libstdc++-v3/include/bits/random.tcc#L399
Coverity report:
399 _M_gen_rand(void)
400 {
401 const _UIntType __upper_mask = (~_UIntType()) << __r;
402 const _UIntType __lower_mask = ~__upper_mask;
403
1. Condition __k < 227UL /* 624UL - 397UL */, taking true branch.
4. Condition __k < 227UL /* 624UL - 397UL */, taking true branch.
7. Condition __k < 227UL /* 624UL - 397UL */, taking false branch.
404 for (size_t __k = 0; __k < (__n - __m); ++__k)
405 {
406 _UIntType __y = ((_M_x[__k] & __upper_mask)
407 | (_M_x[__k + 1] & __lower_mask));
2. Condition __y & 1, taking true branch.
5. Condition __y & 1, taking true branch.
408 _M_x[__k] = (_M_x[__k + __m] ^ (__y >> 1)
409 ^ ((__y & 0x01) ? __a : 0));
3. Jumping back to the beginning of the loop.
6. Jumping back to the beginning of the loop.
410 }
411
8. Condition __k < 623UL /* 624UL - 1 */, taking true branch.
412 for (size_t __k = (__n - __m); __k < (__n - 1); ++__k)
413 {
414 _UIntType __y = ((_M_x[__k] & __upper_mask)
415 | (_M_x[__k + 1] & __lower_mask));
9. overflow: Add operation overflows on operands __k and
18446744073709551389UL.
CID 4797118 (#1-2 of 2): Overflowed array index read (INTEGER_OVERFLOW)
10. overflow_sink: Overflowed or truncated value (or a value computed from an
overflowed or truncated value) __k + 18446744073709551389UL used as array
index.
416 _M_x[__k] = (_M_x[__k + (__m - __n)] ^ (__y >> 1)
417 ^ ((__y & 0x01) ? __a : 0));
418 }