--- parser3/src/targets/apache/mod_parser3_core.C 2020/12/15 13:33:26 1.32 +++ parser3/src/targets/apache/mod_parser3_core.C 2024/11/09 15:38:21 1.38 @@ -1,11 +1,11 @@ /** @file Parser: apache 1.3/2.X module, part, compiled by parser3project. - Copyright (c) 2001-2017 Art. Lebedev Studio (http://www.artlebedev.com) - Author: Alexandr Petrosian (http://paf.design.ru) + Copyright (c) 2001-2024 Art. Lebedev Studio (http://www.artlebedev.com) + Authors: Konstantin Morshnev , Alexandr Petrosian */ -volatile const char * IDENT_MOD_PARSER3_CORE_C="$Id: mod_parser3_core.C,v 1.32 2020/12/15 13:33:26 moko Exp $"; +volatile const char * IDENT_MOD_PARSER3_CORE_C="$Id: mod_parser3_core.C,v 1.38 2024/11/09 15:38:21 moko Exp $"; #include "pa_config_includes.h" @@ -78,6 +78,14 @@ void SAPI::die(const char* fmt, ...) { // va_end(args); } +void SAPI::send_error(SAPI_Info& info, const char *exception_cstr, const char *status){ + // capitalized headers passed for preventing malloc during capitalization + add_header_attribute(info, HTTP_STATUS_CAPITALIZED, status); + add_header_attribute(info, HTTP_CONTENT_TYPE_CAPITALIZED, "text/plain"); + send_header(info); + send_body(info, exception_cstr, strlen(exception_cstr)); +} + 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; @@ -103,7 +111,7 @@ static int SAPI_environment_append(void const char* const* SAPI::Env::get(SAPI_Info& SAPI_info) { const pa_table *t=SAPI_info.r->subprocess_env; - const char** result=new const char*[pa_ap_table_size(t)+1/*0*/]; + const char** result=new(PointerGC) 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; @@ -174,7 +182,7 @@ main workhorse */ static void real_parser_handler(SAPI_Info& SAPI_info, Parser_module_config *dcfg) { // collect garbage from prev request - PA_GC_GCOLLECT; + pa_gc_collect(); // populate env pa_ap_add_common_vars(SAPI_info.r);