]> granicus.if.org Git - apache/commitdiff
Return early with an error instead of returning an incomplete match table.
authorGuenter Knauf <fuankg@apache.org>
Sun, 14 Apr 2013 02:53:36 +0000 (02:53 +0000)
committerGuenter Knauf <fuankg@apache.org>
Sun, 14 Apr 2013 02:53:36 +0000 (02:53 +0000)
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1467721 13f79535-47bb-0310-9956-ffa450edef68

modules/lua/lua_request.c

index 75ba18a4e4bdeec9ac32204f8d34358000c9cd58..b153cbd46663a71fba0464e78cf9e92faa1c5484 100644 (file)
@@ -921,6 +921,16 @@ static int lua_ap_regex(lua_State *L)
         return 2;
     }
 
+    if (regex.re_nsub > MODLUA_MAX_REG_MATCH) {
+        lua_pushboolean(L, 0);
+        err = apr_palloc(r->pool, 64);
+        apr_snprintf(err, 64,
+                     "regcomp found %d matches; only %d allowed.",
+                     regex.re_nsub, MODLUA_MAX_REG_MATCH);
+        lua_pushstring(L, err);
+        return 2;
+    }
+
     rv = ap_regexec(&regex, source, MODLUA_MAX_REG_MATCH, matches, 0);
     if (rv == AP_REG_NOMATCH) {
         lua_pushboolean(L, 0);
@@ -928,7 +938,7 @@ static int lua_ap_regex(lua_State *L)
     }
     
     lua_newtable(L);
-    for (i = 0; i <= regex.re_nsub && i <= MODLUA_MAX_REG_MATCH; i++) {
+    for (i = 0; i <= regex.re_nsub; i++) {
         lua_pushinteger(L, i);
         if (matches[i].rm_so >= 0 && matches[i].rm_eo >= 0)
             lua_pushstring(L,