aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3/include
diff options
context:
space:
mode:
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>2009-02-15 16:47:57 +0000
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>2009-02-15 16:47:57 +0000
commit8426b2f68f401e4ace43d6f0fd21062c98d12e59 (patch)
treeeb15a978460c1aaecb4876c6b96497177e6ac71a /libstdc++-v3/include
parentb5c49426e04c4a37bf9d0b38f0f4e70276d6a182 (diff)
2009-02-15 Paolo Carlini <paolo.carlini@oracle.com>
PR libstdc++/39168 * src/locale_facets.cc (__verify_grouping(const char*, size_t, const string&)): Also check that the value != CHAR_MAX. * include/bits/locale_facets.tcc (__numpunct_cache<>:: _M_cache(const locale&), __add_grouping(_CharT*, _CharT, const char*, size_t, const _CharT*, const _CharT*)): Likewise. * include/bits/locale_facets_nonio.tcc (__moneypunct_cache<>:: _M_cache(const locale&)): Likewise. * testsuite/22_locale/money_put/put/wchar_t/39168.cc: New. * testsuite/22_locale/money_put/put/char/39168.cc: Likewise. * testsuite/22_locale/money_get/get/wchar_t/39168.cc: Likewise. * testsuite/22_locale/money_get/get/char/39168.cc: Likewise. * testsuite/22_locale/num_get/get/wchar_t/39168.cc: Likewise. * testsuite/22_locale/num_get/get/char/39168.cc: Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@144190 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3/include')
-rw-r--r--libstdc++-v3/include/bits/locale_facets.tcc7
-rw-r--r--libstdc++-v3/include/bits/locale_facets_nonio.tcc6
2 files changed, 9 insertions, 4 deletions
diff --git a/libstdc++-v3/include/bits/locale_facets.tcc b/libstdc++-v3/include/bits/locale_facets.tcc
index 779b4d505e1..93bc6d48366 100644
--- a/libstdc++-v3/include/bits/locale_facets.tcc
+++ b/libstdc++-v3/include/bits/locale_facets.tcc
@@ -91,7 +91,9 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
__np.grouping().copy(__grouping, _M_grouping_size);
_M_grouping = __grouping;
_M_use_grouping = (_M_grouping_size
- && static_cast<signed char>(__np.grouping()[0]) > 0);
+ && static_cast<signed char>(_M_grouping[0]) > 0
+ && (_M_grouping[0]
+ != __gnu_cxx::__numeric_traits<char>::__max));
_M_truename_size = __np.truename().size();
_CharT* __truename = new _CharT[_M_truename_size];
@@ -1232,7 +1234,8 @@ _GLIBCXX_END_LDBL_NAMESPACE
size_t __ctr = 0;
while (__last - __first > __gbeg[__idx]
- && static_cast<signed char>(__gbeg[__idx]) > 0)
+ && static_cast<signed char>(__gbeg[__idx]) > 0
+ && __gbeg[__idx] != __gnu_cxx::__numeric_traits<char>::__max)
{
__last -= __gbeg[__idx];
__idx < __gsize - 1 ? ++__idx : ++__ctr;
diff --git a/libstdc++-v3/include/bits/locale_facets_nonio.tcc b/libstdc++-v3/include/bits/locale_facets_nonio.tcc
index 9cc1b913d19..f32ad7fdb1d 100644
--- a/libstdc++-v3/include/bits/locale_facets_nonio.tcc
+++ b/libstdc++-v3/include/bits/locale_facets_nonio.tcc
@@ -81,8 +81,10 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
__mp.grouping().copy(__grouping, _M_grouping_size);
_M_grouping = __grouping;
_M_use_grouping = (_M_grouping_size
- && static_cast<signed char>(__mp.grouping()[0]) > 0);
-
+ && static_cast<signed char>(_M_grouping[0]) > 0
+ && (_M_grouping[0]
+ != __gnu_cxx::__numeric_traits<char>::__max));
+
_M_decimal_point = __mp.decimal_point();
_M_thousands_sep = __mp.thousands_sep();
_M_frac_digits = __mp.frac_digits();