summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--server/core.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/server/core.c b/server/core.c
index 9884a3f209..5a38ab023b 100644
--- a/server/core.c
+++ b/server/core.c
@@ -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"))))