summaryrefslogtreecommitdiff
path: root/libstdc++-v3/include/bits/regex_compiler.h
diff options
context:
space:
mode:
authortimshen <timshen@138bc75d-0d04-0410-961f-82ee72b054a4>2014-11-13 07:40:01 +0000
committertimshen <timshen@138bc75d-0d04-0410-961f-82ee72b054a4>2014-11-13 07:40:01 +0000
commit3167598c1aadb7c3ae954970ef951fa1b983361b (patch)
tree68d467d9153828b89fbe9883b742b813cd151326 /libstdc++-v3/include/bits/regex_compiler.h
parentac20acbd42b3707dfe0e45863a4374f5db882271 (diff)
PR libstdc++/63775
* include/bits/regex_compiler.h (_Compiler<>::_M_expression_term, _BracketMatcher<>::_M_make_range): Throw regex_erorr on invalid range like [z-a]. Change _M_expression_term interface. * include/bits/regex_compiler.tcc ( _Compiler<>::_M_insert_bracket_matcher, _Compiler<>::_M_expression_term): Rewrite bracket expression parsing. * testsuite/28_regex/algorithms/regex_match/cstring_bracket_01.cc: Add testcases and move file out of extended. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@217461 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3/include/bits/regex_compiler.h')
-rw-r--r--libstdc++-v3/include/bits/regex_compiler.h5
1 files changed, 4 insertions, 1 deletions
diff --git a/libstdc++-v3/include/bits/regex_compiler.h b/libstdc++-v3/include/bits/regex_compiler.h
index 1bbc09dd9dcc..d8880cc4794f 100644
--- a/libstdc++-v3/include/bits/regex_compiler.h
+++ b/libstdc++-v3/include/bits/regex_compiler.h
@@ -118,7 +118,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<bool __icase, bool __collate>
void
- _M_expression_term(_BracketMatcher<_TraitsT, __icase, __collate>&
+ _M_expression_term(pair<bool, _CharT>& __last_char,
+ _BracketMatcher<_TraitsT, __icase, __collate>&
__matcher);
int
@@ -390,6 +391,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
void
_M_make_range(_CharT __l, _CharT __r)
{
+ if (__l > __r)
+ __throw_regex_error(regex_constants::error_range);
_M_range_set.push_back(make_pair(_M_translator._M_transform(__l),
_M_translator._M_transform(__r)));
#ifdef _GLIBCXX_DEBUG