From: Adam Dickmeiss Date: Tue, 2 Jul 2013 11:24:34 +0000 (+0200) Subject: http_rewrite: fix start anchor (^) match X-Git-Tag: v1.3.59~25 X-Git-Url: http://jsfdemo.indexdata.com/?a=commitdiff_plain;h=9c5a788489d7fc2bb6796b87ffe6d631f5ef0c90;p=metaproxy-moved-to-github.git http_rewrite: fix start anchor (^) match --- diff --git a/src/filter_http_rewrite.cpp b/src/filter_http_rewrite.cpp index d417f46..145d7fe 100644 --- a/src/filter_http_rewrite.cpp +++ b/src/filter_http_rewrite.cpp @@ -40,6 +40,7 @@ namespace metaproxy_1 { namespace filter { class HttpRewrite::Replace { public: + bool start_anchor; boost::regex re; boost::smatch what; std::string recipe; @@ -389,6 +390,7 @@ const std::string yf::HttpRewrite::Rule::test_patterns( std::map & vars, const std::string & txt) { + bool first = true; std::string out; std::string::const_iterator start, end; start = txt.begin(); @@ -401,6 +403,8 @@ const std::string yf::HttpRewrite::Rule::test_patterns( std::list::iterator it = replace_list.begin(); for (; it != replace_list.end(); it++) { + if (it->start_anchor && !first) + continue; if (regex_search(start, end, it->what, it->re)) { if (it->what[0].first < best_pos) @@ -413,7 +417,7 @@ const std::string yf::HttpRewrite::Rule::test_patterns( if (bit == replace_list.end()) break; } - + first = false; size_t i; for (i = 1; i < bit->what.size(); ++i) { @@ -445,6 +449,7 @@ void yf::HttpRewrite::Replace::parse_groups(std::string pattern) bool esc = false; const std::string &str = pattern; std::string res; + start_anchor = str[0] == '^'; yaz_log(YLOG_LOG, "Parsing groups from '%s'", str.c_str()); for (size_t i = 0; i < str.size(); ++i) { diff --git a/src/test_filter_rewrite.cpp b/src/test_filter_rewrite.cpp index c38c022..3749509 100644 --- a/src/test_filter_rewrite.cpp +++ b/src/test_filter_rewrite.cpp @@ -85,6 +85,7 @@ BOOST_AUTO_TEST_CASE( test_filter_rewrite_1 ) " \n" " \n" " \n" + " \n" " \n" @@ -145,11 +146,13 @@ BOOST_AUTO_TEST_CASE( test_filter_rewrite_1 ) "" " Another abs link" "" + "" + "" ""; const char *resp_expected = "HTTP/1.1 200 OK\r\n" - "Content-Length: 533\r\n" + "Content-Length: 564\r\n" "Content-Type: text/html\r\n" "Link: ; rel=absolute\r\n" "Link: ; rel=relative\r\n" @@ -172,6 +175,8 @@ BOOST_AUTO_TEST_CASE( test_filter_rewrite_1 ) "" " Another abs link" "" + "" + "" ""; int r;