diff options
author | Paolo Carlini <pcarlini@suse.de> | 2004-11-09 12:49:20 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2004-11-09 12:49:20 +0000 |
commit | cf5c6c8d3188c8e422a0baa1059adc457795b075 (patch) | |
tree | e371e0fec1359af2d0f574677dbc34f831d2602e | |
parent | 37d060a3abc5836a0207dd6968ebadf9c79abdc2 (diff) | |
download | gcc-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/ChangeLog | 9 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/locale_facets.tcc | 19 |
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; |