From 4228f9328c9a7bd0cb78e167cecb5a3fb774fb9c Mon Sep 17 00:00:00 2001 From: Tim Shen Date: Tue, 15 Jul 2014 04:28:51 +0000 Subject: [PATCH] re PR libstdc++/61720 (std::regex_search matches incorrectly) PR libstdc++/61720 * include/bits/regex_executor.tcc (_Executor<>::_M_main_dispatch): Clear match queue for next use. * testsuite/28_regex/algorithms/regex_search/61720.cc: New file. From-SVN: r212539 --- libstdc++-v3/ChangeLog | 7 +++ libstdc++-v3/include/bits/regex_executor.tcc | 1 + .../28_regex/algorithms/regex_search/61720.cc | 48 +++++++++++++++++++ 3 files changed, 56 insertions(+) create mode 100644 libstdc++-v3/testsuite/28_regex/algorithms/regex_search/61720.cc diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 34dc59fd598..955efbf16fc 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,10 @@ +2014-07-15 Tim Shen + + PR libstdc++/61720 + * include/bits/regex_executor.tcc (_Executor<>::_M_main_dispatch): + Clear match queue for next use. + * testsuite/28_regex/algorithms/regex_search/61720.cc: New file. + 2014-07-14 Ulrich Drepper * include/ext/random.tcc: Unfortunately more fixes for diff --git a/libstdc++-v3/include/bits/regex_executor.tcc b/libstdc++-v3/include/bits/regex_executor.tcc index 38b8ff27013..3c68668dbcf 100644 --- a/libstdc++-v3/include/bits/regex_executor.tcc +++ b/libstdc++-v3/include/bits/regex_executor.tcc @@ -137,6 +137,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } if (__match_mode == _Match_mode::_Exact) __ret = _M_has_sol; + _M_states._M_match_queue.clear(); return __ret; } diff --git a/libstdc++-v3/testsuite/28_regex/algorithms/regex_search/61720.cc b/libstdc++-v3/testsuite/28_regex/algorithms/regex_search/61720.cc new file mode 100644 index 00000000000..15f4fd6c0d1 --- /dev/null +++ b/libstdc++-v3/testsuite/28_regex/algorithms/regex_search/61720.cc @@ -0,0 +1,48 @@ +// { dg-options "-std=gnu++11" } + +// +// Copyright (C) 2014 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +#include +#include +#include + +using namespace __gnu_test; +using namespace std; + +// libstdc++/61720 +void +test01() +{ + bool test __attribute__((unused)) = true; + + string s = R"("test\")"; + VERIFY(!regex_search_debug(s, regex(R"("([^"]|\\")*[^\\]")"))); + VERIFY(!regex_match_debug(s, regex(R"("([^"]|\\")*[^\\]")"))); + VERIFY(!regex_search_debug(s, regex(R"("([^"]|\\")*[^\\]")", + regex_constants::extended))); + VERIFY(!regex_match_debug(s, regex(R"("([^"]|\\")*[^\\]")", + regex_constants::extended))); +} + +int +main() +{ + test01(); + return 0; +}