This is an automated email from the ASF dual-hosted git repository.

bcall 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 9f3f9c5bc9 Change map_with_referer to use Regex class instead of pcre 
directly (#11294)
9f3f9c5bc9 is described below

commit 9f3f9c5bc9b3d0134e08007dca12785c34952ef3
Author: Bryan Call <bc...@apache.org>
AuthorDate: Sun May 5 21:29:16 2024 -0700

    Change map_with_referer to use Regex class instead of pcre directly (#11294)
---
 include/proxy/http/remap/UrlMapping.h  | 28 +++++++++++-----------------
 src/proxy/http/remap/RemapProcessor.cc |  2 +-
 src/proxy/http/remap/UrlMapping.cc     | 20 +++++---------------
 3 files changed, 17 insertions(+), 33 deletions(-)

diff --git a/include/proxy/http/remap/UrlMapping.h 
b/include/proxy/http/remap/UrlMapping.h
index 3f17f87e69..a35b66f8c1 100644
--- a/include/proxy/http/remap/UrlMapping.h
+++ b/include/proxy/http/remap/UrlMapping.h
@@ -26,15 +26,8 @@
 
 #include <vector>
 
-#if __has_include("pcre/pcre.h")
-#include <pcre/pcre.h>
-#elif __has_include("pcre.h")
-#include <pcre.h>
-#else
-#error "Unable to locate PCRE heeader"
-#endif
-
 #include "tscore/ink_config.h"
+#include "tsutil/Regex.h"
 #include "proxy/http/remap/AclFiltering.h"
 #include "proxy/hdrs/URL.h"
 #include "proxy/http/remap/RemapPluginInfo.h"
@@ -45,20 +38,21 @@
 class NextHopSelectionStrategy;
 
 /**
- * Used to store http referer strings (and/or regexp)
+ * Used to store http referrer strings (and/or regexp)
  **/
 class referer_info
 {
 public:
-  referer_info(char *_ref, bool *error_flag = nullptr, char *errmsgbuf = 
nullptr, int errmsgbuf_size = 0);
+  referer_info(const char *_ref, bool *error_flag, char *errmsgbuf = nullptr, 
int errmsgbuf_size = 0);
   ~referer_info();
-  referer_info *next;
-  char         *referer;
-  int           referer_size;
-  bool          any;      /* any flag '*' */
-  bool          negative; /* negative referer '~' */
-  bool          regx_valid;
-  pcre         *regx;
+
+  referer_info *next         = nullptr;
+  char         *referer      = nullptr;
+  int           referer_size = 0;
+  bool          any          = false; /* any flag '*' */
+  bool          negative     = false; /* negative referer '~' */
+  bool          regex_valid  = false;
+  Regex         regex;
 };
 
 /**
diff --git a/src/proxy/http/remap/RemapProcessor.cc 
b/src/proxy/http/remap/RemapProcessor.cc
index dd15b6e729..1e54c5eb67 100644
--- a/src/proxy/http/remap/RemapProcessor.cc
+++ b/src/proxy/http/remap/RemapProcessor.cc
@@ -176,7 +176,7 @@ RemapProcessor::finish_remap(HttpTransact::State *s, 
UrlRewrite *table)
           if (!map->negative_referer) {
             break;
           }
-        } else if (ri->regx_valid && (pcre_exec(ri->regx, nullptr, 
tmp_referer_buf, referer_len, 0, 0, nullptr, 0) != -1)) {
+        } else if (ri->regex_valid && 
ri->regex.exec(std::string_view(tmp_referer_buf, referer_len))) {
           enabled_flag = ri->negative ? false : true;
           break;
         }
diff --git a/src/proxy/http/remap/UrlMapping.cc 
b/src/proxy/http/remap/UrlMapping.cc
index 0d68041fc0..0a3a85236e 100644
--- a/src/proxy/http/remap/UrlMapping.cc
+++ b/src/proxy/http/remap/UrlMapping.cc
@@ -156,16 +156,14 @@ redirect_tag_str::parse_format_redirect_url(char *url)
 /**
  *
  **/
-referer_info::referer_info(char *_ref, bool *error_flag, char *errmsgbuf, int 
errmsgbuf_size)
-  : next(nullptr), referer(nullptr), referer_size(0), any(false), 
negative(false), regx_valid(false)
+referer_info::referer_info(const char *_ref, bool *error_flag, char 
*errmsgbuf, int errmsgbuf_size)
 {
-  const char *error;
+  std::string error;
   int         erroffset;
 
   if (error_flag) {
     *error_flag = false;
   }
-  regx = nullptr;
 
   if (_ref) {
     if (*_ref == '~') {
@@ -177,16 +175,14 @@ referer_info::referer_info(char *_ref, bool *error_flag, 
char *errmsgbuf, int er
       if (!strcmp(referer, "*")) {
         any = true;
       } else {
-        regx = pcre_compile(referer, PCRE_CASELESS, &error, &erroffset, 
nullptr);
-        if (!regx) {
+        regex_valid = regex.compile(referer, error, erroffset, 
RE_CASE_INSENSITIVE);
+        if (regex_valid == false) {
           if (errmsgbuf && (errmsgbuf_size - 1) > 0) {
-            ink_strlcpy(errmsgbuf, error, errmsgbuf_size);
+            ink_strlcpy(errmsgbuf, error.c_str(), errmsgbuf_size);
           }
           if (error_flag) {
             *error_flag = true;
           }
-        } else {
-          regx_valid = true;
         }
       }
     }
@@ -201,10 +197,4 @@ referer_info::~referer_info()
   ats_free(referer);
   referer      = nullptr;
   referer_size = 0;
-
-  if (regx_valid) {
-    pcre_free(regx);
-    regx       = nullptr;
-    regx_valid = false;
-  }
 }

Reply via email to