You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by am...@apache.org on 2019/02/04 22:16:06 UTC
[trafficserver] branch master updated: Use POSIX ERE for uri
signing regex evaluation
This is an automated email from the ASF dual-hosted git repository.
amc pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficserver.git
The following commit(s) were added to refs/heads/master by this push:
new be56b3a Use POSIX ERE for uri signing regex evaluation
be56b3a is described below
commit be56b3aa010723d15fdcc77ff2cb85fbaceb8fc5
Author: Dylan Souza <dy...@comcast.com>
AuthorDate: Wed Jan 30 18:02:47 2019 +0000
Use POSIX ERE for uri signing regex evaluation
---
plugins/experimental/uri_signing/match.c | 29 ++++++++++++++-------
.../uri_signing/unit_tests/uri_signing_test.cc | 30 ++++++++++++++++++++++
2 files changed, 50 insertions(+), 9 deletions(-)
diff --git a/plugins/experimental/uri_signing/match.c b/plugins/experimental/uri_signing/match.c
index 18fb31a..40d4d47 100644
--- a/plugins/experimental/uri_signing/match.c
+++ b/plugins/experimental/uri_signing/match.c
@@ -16,10 +16,10 @@
* limitations under the License.
*/
+#include <regex.h>
#include "common.h"
#include "ts/ts.h"
#include <stdbool.h>
-#include <pcre.h>
#include <string.h>
bool
@@ -31,16 +31,27 @@ match_hash(const char *needle, const char *haystack)
bool
match_regex(const char *pattern, const char *uri)
{
- const char *err;
- int err_off;
+ struct re_pattern_buffer pat_buff;
+
+ pat_buff.translate = 0;
+ pat_buff.fastmap = 0;
+ pat_buff.buffer = 0;
+ pat_buff.allocated = 0;
+
+ re_syntax_options = RE_SYNTAX_POSIX_MINIMAL_EXTENDED;
+
PluginDebug("Testing regex pattern /%s/ against \"%s\"", pattern, uri);
- pcre *re = pcre_compile(pattern, PCRE_ANCHORED | PCRE_UCP | PCRE_UTF8, &err, &err_off, NULL);
- if (!re) {
- PluginDebug("Regex /%s/ failed to compile.", pattern);
+
+ const char *comp_err = re_compile_pattern(pattern, strlen(pattern), &pat_buff);
+
+ if (comp_err) {
+ PluginDebug("Regex Compilation ERROR: %s", comp_err);
return false;
}
- int rc = pcre_exec(re, NULL, uri, strlen(uri), 0, 0, NULL, 0);
- pcre_free(re);
- return rc >= 0;
+ int match_ret;
+ match_ret = re_match(&pat_buff, uri, strlen(uri), 0, 0);
+ regfree(&pat_buff);
+
+ return match_ret >= 0;
}
diff --git a/plugins/experimental/uri_signing/unit_tests/uri_signing_test.cc b/plugins/experimental/uri_signing/unit_tests/uri_signing_test.cc
index b879f7c..f39758e 100644
--- a/plugins/experimental/uri_signing/unit_tests/uri_signing_test.cc
+++ b/plugins/experimental/uri_signing/unit_tests/uri_signing_test.cc
@@ -29,6 +29,7 @@ extern "C" {
#include "../jwt.h"
#include "../normalize.h"
#include "../parse.h"
+#include "../match.h"
}
bool
@@ -446,3 +447,32 @@ TEST_CASE("4", "[NormalizeTest]")
SECTION("Testing empty uri after http://?/") { REQUIRE(!normalize_uri_helper("http://?/", NULL)); }
fprintf(stderr, "\n");
}
+
+TEST_CASE("5", "[RegexTests]")
+{
+ INFO("TEST 5, Test Regex Matching");
+
+ SECTION("Standard regex")
+ {
+ REQUIRE(match_regex("http://kelloggsTester.souza.local/KellogsDir/*",
+ "http://kelloggsTester.souza.local/KellogsDir/some_manifest.m3u8"));
+ }
+
+ SECTION("Back references are not supported") { REQUIRE(!match_regex("(b*a)\\1$", "bbbbba")); }
+
+ SECTION("Escape a special character") { REQUIRE(match_regex("money\\$", "money$bags")); }
+
+ SECTION("Dollar sign")
+ {
+ REQUIRE(!match_regex(".+foobar$", "foobarfoofoo"));
+ REQUIRE(match_regex(".+foobar$", "foofoofoobar"));
+ }
+
+ SECTION("Number Quantifier with Groups")
+ {
+ REQUIRE(match_regex("(abab){2}", "abababab"));
+ REQUIRE(!match_regex("(abab){2}", "abab"));
+ }
+
+ SECTION("Alternation") { REQUIRE(match_regex("cat|dog", "dog")); }
+}