Message ID | ea451cae-782b-69ee-cff4-26b761f451fd@crans.org |
---|---|
State | New |
Headers | show |
Series | PR libstdc++/70664 Set failbit and read zero on stream reading negative value into unsigned type | expand |
On 13 March 2018 at 15:55, Jean-Baptiste Daval wrote: > Hi, > > Currently when a value is extracted from a stream into a unsigned type, > there is no test to check if the value is negative, in which case there > is an overflow and failbit is not set (the correct behavior would be to > read a zero and set failbit). This patch add a condition to check when > we are in this particular case, read a zero and set failbit accordingly. Thank you for the patch. It looks small enough that we don't need a copyright assignment. The GCC trunk is currently only open for regression fixes (and we also allow changes to C++17 library features while our C++17 support is considered experimental). As soon as the trunk re-opens for normal changes I'll apply your patch. For now I've updated the bug report with a link to your patch, so we won't forget about it.
--- a/libstdc++-v3/include/bits/locale_facets.tcc +++ b/libstdc++-v3/include/bits/locale_facets.tcc @@ -571,6 +571,11 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL __v = 0; __err = ios_base::failbit; } + else if (__negative && !__num_traits::_is_signed) + { + __v = 0; + __err = ios_base::failbit; + } else if (__testoverflow) { if (__negative && __num_traits::__is_signed)