[PATCH] Avoid signed overflow in num_get::_M_extract_int (PR libstdc++/67214)
Jonathan Wakely
jwakely@redhat.com
Fri May 19 14:38:00 GMT 2017
On 18/05/17 19:10 +0800, Xi Ruoyao wrote:
>This UB has been hiding so long...
Indeed! Thanks for the patch.
>2017-03-11  Xi Ruoyao  <ryxi@stu.xidian.edu.cn>
>
> PR libstdc++/67214
> * include/bits/locale_facets.tcc (_M_extract_int):
> Â Â Add explicit conversion to avoid signed overflow.
>---
>Â libstdc++-v3/include/bits/locale_facets.tcc | 3 ++-
>Â 1 file changed, 2 insertions(+), 1 deletion(-)
>
>diff --git a/libstdc++-v3/include/bits/locale_facets.tcc b/libstdc++-v3/include/bits/locale_facets.tcc
>index 351190c..5f85d15 100644
>--- a/libstdc++-v3/include/bits/locale_facets.tcc
>+++ b/libstdc++-v3/include/bits/locale_facets.tcc
>@@ -470,7 +470,8 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL
>Â bool __testoverflow = false;
>Â const __unsigned_type __max =
>Â Â Â (__negative && __gnu_cxx::__numeric_traits<_ValueT>::__is_signed)
>- Â Â ? -__gnu_cxx::__numeric_traits<_ValueT>::__min
>+ Â Â ? -static_cast<__unsigned_type>(__gnu_cxx::
>+ Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â __numeric_traits<_ValueT>::__min)
Do we need to keep the negation, or can we just cast to
__unsigned_type?
More information about the Libstdc++
mailing list