]> granicus.if.org Git - apache/commitdiff
Resolve the EXEC_ON_READ bit for ServerRoot and other modules that test
authorWilliam A. Rowe Jr <wrowe@apache.org>
Sat, 18 May 2002 17:22:23 +0000 (17:22 +0000)
committerWilliam A. Rowe Jr <wrowe@apache.org>
Sat, 18 May 2002 17:22:23 +0000 (17:22 +0000)
  the directive context.  Should eliminate the segfault.

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

server/core.c

index 9884a3f20912b9de2aa68cefa94fb7c035022e3d..5a38ab023b1b97c53a7d278df1c31c1fbbebc3a3 100644 (file)
@@ -983,13 +983,20 @@ AP_DECLARE(const char *) ap_check_cmd_context(cmd_parms *cmd,
                            " cannot occur within <Limit> section", NULL);
     }
 
-    if ((forbidden & NOT_IN_DIR_LOC_FILE) == NOT_IN_DIR_LOC_FILE
-        && cmd->path != NULL) {
-        return apr_pstrcat(cmd->pool, cmd->cmd->name, gt,
-                           " cannot occur within <Directory/Location/Files> "
-                           "section", NULL);
+    if ((forbidden & NOT_IN_DIR_LOC_FILE) == NOT_IN_DIR_LOC_FILE) {
+        if (cmd->path != NULL) {
+            return apr_pstrcat(cmd->pool, cmd->cmd->name, gt,
+                            " cannot occur within <Directory/Location/Files> "
+                            "section", NULL);
+        }
+        if (cmd->cmd->req_override & EXEC_ON_READ) {
+            /* EXEC_ON_READ must be NOT_IN_DIR_LOC_FILE, if not, it will
+             * (deliberately) segfault below in the individual tests...
+             */
+            return NULL;
+        }
     }
-
+    
     if (((forbidden & NOT_IN_DIRECTORY)
          && ((found = find_parent(cmd->directive, "<Directory"))
              || (found = find_parent(cmd->directive, "<DirectoryMatch"))))