aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Carlini <pcarlini@suse.de>2004-11-09 12:49:20 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2004-11-09 12:49:20 +0000
commitcf5c6c8d3188c8e422a0baa1059adc457795b075 (patch)
treee371e0fec1359af2d0f574677dbc34f831d2602e
parent37d060a3abc5836a0207dd6968ebadf9c79abdc2 (diff)
downloadgcc-cf5c6c8d3188c8e422a0baa1059adc457795b075.zip
gcc-cf5c6c8d3188c8e422a0baa1059adc457795b075.tar.gz
gcc-cf5c6c8d3188c8e422a0baa1059adc457795b075.tar.bz2
locale_facets.tcc (time_get<>::do_get_weekday, [...]): Absolutely avoid dereferencing end iterators.
2004-11-09 Paolo Carlini <pcarlini@suse.de> * include/bits/locale_facets.tcc (time_get<>::do_get_weekday, time_get<>::do_get_monthname): Absolutely avoid dereferencing end iterators. * include/bits/locale_facets.tcc (time_get<>::_M_extract_name): Minor tweak. From-SVN: r90341
-rw-r--r--libstdc++-v3/ChangeLog9
-rw-r--r--libstdc++-v3/include/bits/locale_facets.tcc19
2 files changed, 18 insertions, 10 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index d8740bd..3cace9c 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,12 @@
+2004-11-09 Paolo Carlini <pcarlini@suse.de>
+
+ * include/bits/locale_facets.tcc (time_get<>::do_get_weekday,
+ time_get<>::do_get_monthname): Absolutely avoid dereferencing
+ end iterators.
+
+ * include/bits/locale_facets.tcc (time_get<>::_M_extract_name):
+ Minor tweak.
+
2004-11-08 Benjamin Kosnik <bkoz@redhat.com>
Doug Gregor <dgregor@cs.indiana.edu>
diff --git a/libstdc++-v3/include/bits/locale_facets.tcc b/libstdc++-v3/include/bits/locale_facets.tcc
index 41778bc..8216978 100644
--- a/libstdc++-v3/include/bits/locale_facets.tcc
+++ b/libstdc++-v3/include/bits/locale_facets.tcc
@@ -2043,8 +2043,7 @@ namespace std
for (size_t __i2 = 1; __i2 < __nmatches; ++__i2)
__minlen = std::min(__minlen,
__traits_type::length(__names[__matches[__i2]]));
- ++__pos;
- ++__beg;
+ ++__beg, ++__pos;
if (__pos < __minlen && __beg != __end)
for (size_t __i3 = 0; __i3 < __nmatches;)
{
@@ -2061,8 +2060,7 @@ namespace std
if (__nmatches == 1)
{
// Make sure found name is completely extracted.
- ++__pos;
- ++__beg;
+ ++__beg, ++__pos;
__name = __names[__matches[0]];
const size_t __len = __traits_type::length(__name);
while (__pos < __len && __beg != __end && __name[__pos] == *__beg)
@@ -2135,7 +2133,7 @@ namespace std
// __days array with the same index points to a day, and that
// day's abbreviated form.
// NB: Also assumes that an abbreviated name is a subset of the name.
- if (!__err)
+ if (!__err && __beg != __end)
{
size_t __pos = __traits_type::length(__days[__tmpwday]);
__tp._M_days(__days);
@@ -2150,9 +2148,10 @@ namespace std
if (__len != __pos)
__err |= ios_base::failbit;
}
- if (!__err)
- __tm->tm_wday = __tmpwday;
}
+ if (!__err)
+ __tm->tm_wday = __tmpwday;
+
if (__beg == __end)
__err |= ios_base::eofbit;
return __beg;
@@ -2180,7 +2179,7 @@ namespace std
// __months array with the same index points to a month, and that
// month's abbreviated form.
// NB: Also assumes that an abbreviated name is a subset of the name.
- if (!__err)
+ if (!__err && __beg != __end)
{
size_t __pos = __traits_type::length(__months[__tmpmon]);
__tp._M_months(__months);
@@ -2195,9 +2194,9 @@ namespace std
if (__len != __pos)
__err |= ios_base::failbit;
}
- if (!__err)
- __tm->tm_mon = __tmpmon;
}
+ if (!__err)
+ __tm->tm_mon = __tmpmon;
if (__beg == __end)
__err |= ios_base::eofbit;