]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
don't use DOTALL from mod_substitute which leaves \n at the end of the line.
authorEric Covener <covener@apache.org>
Wed, 12 Feb 2020 13:36:40 +0000 (13:36 +0000)
committerEric Covener <covener@apache.org>
Wed, 12 Feb 2020 13:36:40 +0000 (13:36 +0000)
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1873941 13f79535-47bb-0310-9956-ffa450edef68

include/ap_mmn.h
include/ap_regex.h
modules/filters/mod_substitute.c
server/util_pcre.c
server/util_regex.c

index 5d1941228cf7be790f5a4e2ceec04bcefd14154a..cff2ba7bdae7e1737f7ceaa6c650870baeb414df 100644 (file)
  * 20190312.6 (2.5.1-dev)  Add proxy check_trans hook
  * 20190312.7 (2.5.1-dev)  AP_REG_DEFAULT macro in ap_regex.h
  * 20190312.8 (2.5.1-dev)  ap_is_chunked() in httpd.h
+ * 20190312.9 (2.5.1-dev)  AP_REG_NO_DOTALL macro in ap_regex.h
  */
 
 #define MODULE_MAGIC_COOKIE 0x41503235UL /* "AP25" */
 #ifndef MODULE_MAGIC_NUMBER_MAJOR
 #define MODULE_MAGIC_NUMBER_MAJOR 20190312
 #endif
-#define MODULE_MAGIC_NUMBER_MINOR 8              /* 0...n */
+#define MODULE_MAGIC_NUMBER_MINOR 9            /* 0...n */
 
 /**
  * Determine if the server's current MODULE_MAGIC_NUMBER is at least a
index 9eb6b4b861e4ddb4625e2d36d4b95c7d7e1ebdeb..62a3eb287540685e0edf823e307fe1f42c499615 100644 (file)
@@ -87,6 +87,8 @@ extern "C" {
 
 #define AP_REG_DOLLAR_ENDONLY 0x200 /**< '$' matches at end of subject string only */
 
+#define AP_REG_NO_DOTALL 0x400 /**< remove AP_REG_DOTALL from defaults */
+
 #define AP_REG_MATCH "MATCH_" /**< suggested prefix for ap_regname */
 
 #define AP_REG_DEFAULT (AP_REG_DOTALL|AP_REG_DOLLAR_ENDONLY)
index f4563c14334c3ee87404f6a5e060f2993c6722a3..ee397d198e89cd4c39bced8190bb2681b476d854 100644 (file)
@@ -716,7 +716,7 @@ static const char *set_pattern(cmd_parms *cmd, void *cfg, const char *line)
 
     /* first see if we can compile the regex */
     if (!is_pattern) {
-        r = ap_pregcomp(cmd->pool, from, AP_REG_EXTENDED |
+        r = ap_pregcomp(cmd->pool, from, AP_REG_NO_DOTALL | AP_REG_EXTENDED |
                         (ignore_case ? AP_REG_ICASE : 0));
         if (!r)
             return "Substitute could not compile regex";
index 581ccc031d6e34032fe3f229335c82788bea3545..94e85e44a0b1c90f3442bbddb393ec5396fa2282 100644 (file)
@@ -179,6 +179,9 @@ AP_DECLARE(int) ap_regcomp_default_cflag_by_name(const char *name)
     else if (ap_cstr_casecmp(name, "DOTALL") == 0) {
         cflag = AP_REG_DOTALL;
     }
+    else if (ap_cstr_casecmp(name, "NO_DOTALL") == 0) {
+        cflag = AP_REG_NO_DOTALL;
+    }
     else if (ap_cstr_casecmp(name, "DOLLAR_ENDONLY") == 0) {
         cflag = AP_REG_DOLLAR_ENDONLY;
     }
@@ -217,6 +220,8 @@ AP_DECLARE(int) ap_regcomp(ap_regex_t * preg, const char *pattern, int cflags)
         options |= PCREn(MULTILINE);
     if ((cflags & AP_REG_DOTALL) != 0)
         options |= PCREn(DOTALL);
+    if ((cflags & AP_REG_NO_DOTALL) != 0)
+        options &= ~PCREn(DOTALL);
     if ((cflags & AP_REG_DOLLAR_ENDONLY) != 0)
         options |= PCREn(DOLLAR_ENDONLY);
 
index 2a30d68176961369c7db2b2fd8f3cbab1f8c81d1..daf0ae7caa5a0b99257d18a87d1d4fe2d4a4d936 100644 (file)
@@ -101,6 +101,7 @@ AP_DECLARE(ap_rxplus_t*) ap_rxplus_compile(apr_pool_t *pool,
         case 'n': ret->flags |= AP_REG_NOMEM; break;
         case 'g': ret->flags |= AP_REG_MULTI; break;
         case 's': ret->flags |= AP_REG_DOTALL; break;
+        case 'S': ret->flags |= AP_REG_NO_DOTALL; break;
         case '^': ret->flags |= AP_REG_NOTBOL; break;
         case '$': ret->flags |= AP_REG_NOTEOL; break;
         default: break; /* we should probably be stricter here */