You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by ji...@apache.org on 2011/10/29 18:07:16 UTC

svn commit: r1194912 - /httpd/httpd/trunk/server/util.c

Author: jim
Date: Sat Oct 29 16:07:16 2011
New Revision: 1194912

URL: http://svn.apache.org/viewvc?rev=1194912&view=rev
Log:
Remove magic numbers; ensure that an invalid nmatch is corrected
tagged

Modified:
    httpd/httpd/trunk/server/util.c

Modified: httpd/httpd/trunk/server/util.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/server/util.c?rev=1194912&r1=1194911&r2=1194912&view=diff
==============================================================================
--- httpd/httpd/trunk/server/util.c (original)
+++ httpd/httpd/trunk/server/util.c Sat Oct 29 16:07:16 2011
@@ -382,9 +382,9 @@ static apr_status_t regsub_core(apr_pool
     apr_size_t len = 0;
 
     AP_DEBUG_ASSERT((result && p && !vb) || (vb && !p && !result));
-    if (!source)
+    if (!source || nmatch>AP_MAX_REG_MATCH)
         return APR_EINVAL;
-    if (!nmatch || nmatch>AP_MAX_REG_MATCH) {
+    if (!nmatch) {
         len = strlen(src);
         if (maxlen > 0 && len >= maxlen)
             return APR_ENOMEM;
@@ -405,7 +405,7 @@ static apr_status_t regsub_core(apr_pool
         else
             no = AP_MAX_REG_MATCH;
 
-        if (no > 9) {                /* Ordinary character. */
+        if (no >= AP_MAX_REG_MATCH) {  /* Ordinary character. */
             if (c == '\\' && *src)
                 src++;
             len++;
@@ -440,9 +440,9 @@ static apr_status_t regsub_core(apr_pool
         else if (c == '$' && apr_isdigit(*src))
             no = *src++ - '0';
         else
-            no = 10;
+            no = AP_MAX_REG_MATCH;
 
-        if (no > 9) {                /* Ordinary character. */
+        if (no >= AP_MAX_REG_MATCH) {  /* Ordinary character. */
             if (c == '\\' && (*src == '$' || *src == '&'))
                 c = *src++;
             *dst++ = c;
@@ -460,7 +460,7 @@ static apr_status_t regsub_core(apr_pool
 }
 
 #ifndef AP_PREGSUB_MAXLEN
-#define AP_PREGSUB_MAXLEN   65536
+#define AP_PREGSUB_MAXLEN   (HUGE_STRING_LEN * 8)
 #endif
 AP_DECLARE(char *) ap_pregsub(apr_pool_t *p, const char *input,
                               const char *source, size_t nmatch,