--- server/core.c.orig 2019-08-07 11:05:16.330350792 -0500 +++ server/core.c.orig 2019-08-07 10:25:12.299710381 -0500 @@ -3081,15 +3081,21 @@ const char *arg) { const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY); + apr_status_t rv; if (err != NULL) { return err; } - if ((apr_filepath_merge((char**)&ap_server_root, NULL, arg, - APR_FILEPATH_TRUENAME, cmd->pool) != APR_SUCCESS) - || !ap_is_directory(cmd->temp_pool, ap_server_root)) { - return "ServerRoot must be a valid directory"; + if (((rv = apr_filepath_merge((char**)&ap_server_root, NULL, arg, + APR_FILEPATH_TRUENAME, cmd->pool)) != APR_SUCCESS) + || (!ap_is_directory(cmd->temp_pool, ap_server_root) + && (rv = APR_ENOTDIR))) /* Deliberately assign rv */ + { + char buf[256] = "ServerRoot must be a valid directory; \0"; + char len = strlen(buf); + apr_strerror(rv, buf + len, sizeof(buf) - len - 1); + return apr_pstrdup(cmd->pool, buf); } return NULL;