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")); }
+}