From 179b536611f3d69beab4fafc3e70c8faacc6f710 Mon Sep 17 00:00:00 2001 From: Breno Silva Date: Fri, 9 Nov 2012 15:07:37 -0400 Subject: [PATCH] =?UTF-8?q?Fixed=20crash=20with=20invalid=20commands=20and?= =?UTF-8?q?=20marked=20IIS=20server=20as=20non-virtua=E2=80=A6=20=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- iis/mymodule.cpp | 8 ++++---- standalone/api.c | 1 + standalone/config.c | 21 +++++++++------------ 3 files changed, 14 insertions(+), 16 deletions(-) diff --git a/iis/mymodule.cpp b/iis/mymodule.cpp index 2a66d688..b02e6f60 100644 --- a/iis/mymodule.cpp +++ b/iis/mymodule.cpp @@ -752,8 +752,8 @@ CMyHttpModule::OnBeginRequest( pConfig->m_dwLastCheck = ctime; - if(ret == 0 || pConfig->m_LastChange.dwLowDateTime != fdata.ftLastWriteTime.dwLowDateTime || - pConfig->m_LastChange.dwHighDateTime != fdata.ftLastWriteTime.dwHighDateTime) + if(pConfig->m_Config == NULL || (ret != 0 && (pConfig->m_LastChange.dwLowDateTime != fdata.ftLastWriteTime.dwLowDateTime || + pConfig->m_LastChange.dwHighDateTime != fdata.ftLastWriteTime.dwHighDateTime))) { pConfig->m_LastChange.dwLowDateTime = fdata.ftLastWriteTime.dwLowDateTime; pConfig->m_LastChange.dwHighDateTime = fdata.ftLastWriteTime.dwHighDateTime; @@ -769,9 +769,9 @@ CMyHttpModule::OnBeginRequest( WriteEventViewerLog(err, EVENTLOG_ERROR_TYPE); } } - - delete path; } + + delete path; } conn_rec *c; diff --git a/standalone/api.c b/standalone/api.c index 7eb65be2..5a08d8e3 100644 --- a/standalone/api.c +++ b/standalone/api.c @@ -143,6 +143,7 @@ server_rec *modsecInit() { server->server_scheme = ""; server->timeout = 60 * 1000000;// 60 seconds server->wild_names = NULL; + server->is_virtual = 0; ap_server_config_defines = apr_array_make(pool, 1, sizeof(char *)); diff --git a/standalone/config.c b/standalone/config.c index d31ac50c..615f0a9e 100644 --- a/standalone/config.c +++ b/standalone/config.c @@ -991,8 +991,8 @@ const char *process_command_config(server_rec *s, apr_status_t status; ap_directive_t *newdir; int optional; + char *err = NULL; - //*(char **)apr_array_push(ari) = (char *)filename; errmsg = populate_include_files(p, ptemp, ari, filename, 0); if(errmsg != NULL) @@ -1108,21 +1108,18 @@ ProcessInclude: break; } - while((parms = (cmd_parms *)apr_array_pop(arr)) != NULL) - { - ap_cfg_closefile(parms->config_file); - } - if (errmsg) { - char *err = (char *)apr_palloc(p, 1024); + err = (char *)apr_palloc(p, 1024); - apr_snprintf(err, 1024, "Syntax error in config file %s, line %d: %s", parms->config_file->name, - parms->config_file->line_number, errmsg); - - return err; + if(parms != NULL) + apr_snprintf(err, 1024, "Syntax error in config file %s, line %d: %s", parms->config_file->name, + parms->config_file->line_number, errmsg); + else + apr_snprintf(err, 1024, "Syntax error in config file: %s", errmsg); } - return NULL; + errmsg = err; + Exit: while((parms = (cmd_parms *)apr_array_pop(arr)) != NULL) {