This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
[PATCH] Avoid signed overflow in num_get::_M_extract_int (PR libstdc++/67214)
- From: Xi Ruoyao <ryxi at stu dot xidian dot edu dot cn>
- To: gcc-patches at gcc dot gnu dot org, libstdc++ at gcc dot gnu dot org
- Cc: ryxi at stu dot xidian dot edu dot cn
- Date: Thu, 18 May 2017 19:10:40 +0800
- Subject: [PATCH] Avoid signed overflow in num_get::_M_extract_int (PR libstdc++/67214)
- Authentication-results: sourceware.org; auth=none
This UB has been hiding so long...
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)
: __gnu_cxx::__numeric_traits<_ValueT>::__max;
const __unsigned_type __smax = __max / __base;
__unsigned_type __result = 0;
--
2.7.1
--
Xi Ruoyao <ryxi@stu.xidian.edu.cn>
School of Aerospace Science and Technology, Xidian University