--- parser3/src/targets/apache/mod_parser3_core.C 2013/07/24 21:21:43 1.8 +++ parser3/src/targets/apache/mod_parser3_core.C 2020/08/13 10:52:34 1.20 @@ -1,11 +1,11 @@ /** @file Parser: apache 1.3/2.X module, part, compiled by parser3project. - Copyright (c) 2001-2012 Art. Lebedev Studio (http://www.artlebedev.com) + Copyright (c) 2001-2017 Art. Lebedev Studio (http://www.artlebedev.com) Author: Alexandr Petrosian (http://paf.design.ru) */ -volatile const char * IDENT_MOD_PARSER3_CORE_C="$Id: mod_parser3_core.C,v 1.8 2013/07/24 21:21:43 moko Exp $"; +volatile const char * IDENT_MOD_PARSER3_CORE_C="$Id: mod_parser3_core.C,v 1.20 2020/08/13 10:52:34 moko Exp $"; #include "pa_config_includes.h" @@ -17,9 +17,9 @@ volatile const char * IDENT_MOD_PARSER3_ #include "pa_sapi.h" #include "classes.h" #include "pa_request.h" -#include "pa_socks.h" -#if _MSC_VER && !defined(_DEBUG) +#if defined(_MSC_VER) && !defined(_DEBUG) +# include # define PA_SUPPRESS_SYSTEM_EXCEPTION #endif @@ -34,10 +34,7 @@ void pa_setup_module_cells() { /// no trying to __try here [yet] try { - // init socks - pa_socks_init(); - - // init global variables + // init libraries pa_globals_init(); } catch(const Exception& e) { // global problem SAPI::abort("setup_module_cells failed: %s", e.comment()); @@ -49,8 +46,6 @@ void pa_destroy_module_cells() { return; pa_globals_done(); - - pa_socks_done(); } @@ -99,7 +94,7 @@ void SAPI::abort(const char* fmt, ...) { va_end(args); } -char* SAPI::get_env(SAPI_Info& SAPI_info, const char* name) { +char* SAPI::Env::get(SAPI_Info& SAPI_info, const char* name) { const char* dont_return_me=pa_ap_table_get(SAPI_info.r->subprocess_env, name); return dont_return_me?pa_strdup(dont_return_me):0; } @@ -122,9 +117,9 @@ static int SAPI_environment_append(void } return 1/*true*/; } -const char* const* SAPI::environment(SAPI_Info& SAPI_info) { +const char* const* SAPI::Env::get(SAPI_Info& SAPI_info) { const pa_table *t=SAPI_info.r->subprocess_env; - const char** result=new(UseGC) const char*[pa_ap_table_size(t)+1/*0*/]; + const char** result=new const char*[pa_ap_table_size(t)+1/*0*/]; SAPI_environment_append_info info={result}; pa_ap_table_do(SAPI_environment_append, &info, t, 0); *info.cur=0; // mark EOE return result; @@ -192,8 +187,10 @@ size_t SAPI::send_body(SAPI_Info& SAPI_i //@} #ifndef PA_DEBUG_DISABLE_GC +#ifndef _MSC_VER extern long GC_large_alloc_warn_suppressed; #endif +#endif /** main workhorse @@ -206,7 +203,6 @@ static void real_parser_handler(SAPI_Inf GC_dont_gc=0; GC_gcollect(); GC_dont_gc=1; - GC_large_alloc_warn_suppressed=0; #endif // populate env @@ -216,15 +212,15 @@ static void real_parser_handler(SAPI_Inf // Request info Request_info request_info; memset(&request_info, 0, sizeof(request_info)); - request_info.document_root=SAPI::get_env(SAPI_info, "DOCUMENT_ROOT"); + request_info.document_root=SAPI::Env::get(SAPI_info, "DOCUMENT_ROOT"); request_info.path_translated=SAPI_info.r->filename; request_info.method=SAPI_info.r->method; request_info.query_string=SAPI_info.r->args; - request_info.uri=SAPI::get_env(SAPI_info, "REQUEST_URI"); - request_info.content_type=SAPI::get_env(SAPI_info, "CONTENT_TYPE"); - const char* content_length=SAPI::get_env(SAPI_info, "CONTENT_LENGTH"); + request_info.uri=request_info.strip_absolute_uri(SAPI::Env::get(SAPI_info, "REQUEST_URI")); + request_info.content_type=SAPI::Env::get(SAPI_info, "CONTENT_TYPE"); + const char* content_length=SAPI::Env::get(SAPI_info, "CONTENT_LENGTH"); request_info.content_length=content_length?atoi(content_length):0; - request_info.cookie=SAPI::get_env(SAPI_info, "HTTP_COOKIE"); + request_info.cookie=SAPI::Env::get(SAPI_info, "HTTP_COOKIE"); request_info.mail_received=false; // prepare to process request @@ -241,10 +237,7 @@ static void real_parser_handler(SAPI_Inf } #ifdef PA_SUPPRESS_SYSTEM_EXCEPTION -static const Exception -call_real_parser_handler__do_PEH_return_it( - SAPI_Info& SAPI_info, Parser_module_config *dcfg) -{ +static const Exception call_real_parser_handler__do_PEH_return_it(SAPI_Info& SAPI_info, Parser_module_config *dcfg) { try { real_parser_handler(SAPI_info, dcfg); } catch(const Exception& e) { @@ -253,33 +246,21 @@ call_real_parser_handler__do_PEH_return_ return Exception(); } -static void call_real_parser_handler__supress_system_exception( - SAPI_Info& SAPI_info, Parser_module_config *dcfg) -{ + +static void call_real_parser_handler__supress_system_exception(SAPI_Info& SAPI_info, Parser_module_config *dcfg) { Exception parser_exception; LPEXCEPTION_POINTERS system_exception=0; __try { - parser_exception=call_real_parser_handler__do_PEH_return_it( - SAPI_info, dcfg); - } __except ( - (system_exception=GetExceptionInformation()), - EXCEPTION_EXECUTE_HANDLER) - { - + parser_exception=call_real_parser_handler__do_PEH_return_it(SAPI_info, dcfg); + } __except ( (system_exception=GetExceptionInformation()), EXCEPTION_EXECUTE_HANDLER) { if(system_exception) if(_EXCEPTION_RECORD *er=system_exception->ExceptionRecord) - throw Exception("system", - 0, - "0x%08X at 0x%08X", er->ExceptionCode, er->ExceptionAddress); + throw Exception("system", 0, "0x%08X at 0x%08X", er->ExceptionCode, er->ExceptionAddress); else - throw Exception("system", - 0, - ""); + throw Exception("system", 0, ""); else - throw Exception("system", - 0, - ""); + throw Exception("system", 0, ""); } if(parser_exception)