Fixed crash with invalid commands and marked IIS server as non-virtual, so many commands would work (like SecDataDir).

This commit is contained in:
Greg Wroblewski 2012-11-08 23:49:04 -08:00
parent f14eaeb3d0
commit 74b8daaadd
3 changed files with 14 additions and 16 deletions

View File

@ -752,8 +752,8 @@ CMyHttpModule::OnBeginRequest(
pConfig->m_dwLastCheck = ctime; pConfig->m_dwLastCheck = ctime;
if(ret == 0 || pConfig->m_LastChange.dwLowDateTime != fdata.ftLastWriteTime.dwLowDateTime || if(pConfig->m_Config == NULL || (ret != 0 && (pConfig->m_LastChange.dwLowDateTime != fdata.ftLastWriteTime.dwLowDateTime ||
pConfig->m_LastChange.dwHighDateTime != fdata.ftLastWriteTime.dwHighDateTime) pConfig->m_LastChange.dwHighDateTime != fdata.ftLastWriteTime.dwHighDateTime)))
{ {
pConfig->m_LastChange.dwLowDateTime = fdata.ftLastWriteTime.dwLowDateTime; pConfig->m_LastChange.dwLowDateTime = fdata.ftLastWriteTime.dwLowDateTime;
pConfig->m_LastChange.dwHighDateTime = fdata.ftLastWriteTime.dwHighDateTime; pConfig->m_LastChange.dwHighDateTime = fdata.ftLastWriteTime.dwHighDateTime;
@ -769,10 +769,10 @@ CMyHttpModule::OnBeginRequest(
WriteEventViewerLog(err, EVENTLOG_ERROR_TYPE); WriteEventViewerLog(err, EVENTLOG_ERROR_TYPE);
} }
} }
}
delete path; delete path;
} }
}
conn_rec *c; conn_rec *c;
request_rec *r; request_rec *r;

View File

@ -143,6 +143,7 @@ server_rec *modsecInit() {
server->server_scheme = ""; server->server_scheme = "";
server->timeout = 60 * 1000000;// 60 seconds server->timeout = 60 * 1000000;// 60 seconds
server->wild_names = NULL; server->wild_names = NULL;
server->is_virtual = 0;
ap_server_config_defines = apr_array_make(pool, 1, sizeof(char *)); ap_server_config_defines = apr_array_make(pool, 1, sizeof(char *));

View File

@ -991,8 +991,8 @@ const char *process_command_config(server_rec *s,
apr_status_t status; apr_status_t status;
ap_directive_t *newdir; ap_directive_t *newdir;
int optional; int optional;
char *err = NULL;
//*(char **)apr_array_push(ari) = (char *)filename;
errmsg = populate_include_files(p, ptemp, ari, filename, 0); errmsg = populate_include_files(p, ptemp, ari, filename, 0);
if(errmsg != NULL) if(errmsg != NULL)
@ -1108,21 +1108,18 @@ ProcessInclude:
break; break;
} }
while((parms = (cmd_parms *)apr_array_pop(arr)) != NULL)
{
ap_cfg_closefile(parms->config_file);
}
if (errmsg) { if (errmsg) {
char *err = (char *)apr_palloc(p, 1024); err = (char *)apr_palloc(p, 1024);
if(parms != NULL)
apr_snprintf(err, 1024, "Syntax error in config file %s, line %d: %s", parms->config_file->name, apr_snprintf(err, 1024, "Syntax error in config file %s, line %d: %s", parms->config_file->name,
parms->config_file->line_number, errmsg); parms->config_file->line_number, errmsg);
else
return err; apr_snprintf(err, 1024, "Syntax error in config file: %s", errmsg);
} }
return NULL; errmsg = err;
Exit: Exit:
while((parms = (cmd_parms *)apr_array_pop(arr)) != NULL) while((parms = (cmd_parms *)apr_array_pop(arr)) != NULL)
{ {