From e1f29d826efb7941c8b59f5adae5b7111635c82f Mon Sep 17 00:00:00 2001 From: Christophe Jaillet Date: Wed, 4 Sep 2019 19:11:28 +0000 Subject: [PATCH] Fix an issue on Windows where looks for a file on a non-existent drive (on a USB key that is not plugged for example) Issue repported by Heather Lotz git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1866418 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES | 4 ++++ server/core.c | 9 ++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index cba4b195abd..d152919575d 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,10 @@ -*- coding: utf-8 -*- Changes with Apache 2.5.1 + *) core: On Windows, fix a start-up crash if is used with a path that is not + valid (For example, testing for a file on a flash drive that is not mounted) + [Christophe Jaillet] + *) mod_proxy_balancer: Fix case-sensitive referer check related to CSRF/XSS protection. PR63688. [Armin Abfalterer ] diff --git a/server/core.c b/server/core.c index 11bf8d3d102..6de5892a21d 100644 --- a/server/core.c +++ b/server/core.c @@ -2948,8 +2948,15 @@ static int test_iffile_section(cmd_parms *cmd, const char *arg) const char *relative; apr_finfo_t sb; + /* + * At least on Windows, if the path we are testing is not valid (for example + * a path on a USB key that is not plugged), 'ap_server_root_relative()' will + * return NULL. In such a case, consider that the file is not there and that + * the section should be skipped. + */ relative = ap_server_root_relative(cmd->temp_pool, arg); - return (apr_stat(&sb, relative, 0, cmd->pool) == APR_SUCCESS); + return (relative && + (apr_stat(&sb, relative, APR_FINFO_TYPE, cmd->temp_pool) == APR_SUCCESS)); } static int test_ifdirective_section(cmd_parms *cmd, const char *arg) -- 2.47.3