]> granicus.if.org Git - apache/commitdiff
Compile the regex used by is_header_regex() only once during startup
authorStefan Fritsch <sf@apache.org>
Sun, 27 May 2012 21:02:09 +0000 (21:02 +0000)
committerStefan Fritsch <sf@apache.org>
Sun, 27 May 2012 21:02:09 +0000 (21:02 +0000)
This should save some memory, especially with .htaccess

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1343099 13f79535-47bb-0310-9956-ffa450edef68

modules/metadata/mod_setenvif.c

index 80825ccefa0729ccc2ace5491bc7302905be92ec..65214cd4f015057ff10f0bc7eeaba4439dd6e9e2 100644 (file)
@@ -165,17 +165,15 @@ static void *merge_setenvif_config(apr_pool_t *p, void *basev, void *overridesv)
 #define ICASE_MAGIC  ((void *)(&setenvif_module))
 #define SEI_MAGIC_HEIRLOOM "setenvif-phase-flag"
 
+static ap_regex_t *is_header_regex_regex;
+
 static int is_header_regex(apr_pool_t *p, const char* name)
 {
     /* If a Header name contains characters other than:
      *    -,_,[A-Z\, [a-z] and [0-9].
      * assume the header name is a regular expression.
      */
-    ap_regex_t *preg = ap_pregcomp(p, "^[-A-Za-z0-9_]*$",
-                                   (AP_REG_EXTENDED | AP_REG_NOSUB ));
-    ap_assert(preg != NULL);
-
-    if (ap_regexec(preg, name, 0, NULL, 0)) {
+    if (ap_regexec(is_header_regex_regex, name, 0, NULL, 0)) {
         return 1;
     }
 
@@ -633,6 +631,10 @@ static void register_hooks(apr_pool_t *p)
 {
     ap_hook_header_parser(match_headers, NULL, NULL, APR_HOOK_MIDDLE);
     ap_hook_post_read_request(match_headers, NULL, NULL, APR_HOOK_MIDDLE);
+
+    is_header_regex_regex = ap_pregcomp(p, "^[-A-Za-z0-9_]*$",
+                                        (AP_REG_EXTENDED | AP_REG_NOSUB ));
+    ap_assert(is_header_regex_regex != NULL);
 }
 
 AP_DECLARE_MODULE(setenvif) =