--- parser3/src/targets/cgi/parser3.C 2024/12/11 18:35:31 1.366 +++ parser3/src/targets/cgi/parser3.C 2026/09/27 19:40:38 1.371 @@ -1,11 +1,11 @@ /** @file Parser: scripting and CGI main. - Copyright (c) 2001-2024 Art. Lebedev Studio (http://www.artlebedev.com) + Copyright (c) 2001-2026 Art. Lebedev Studio (https://www.artlebedev.com) Authors: Konstantin Morshnev , Alexandr Petrosian */ -volatile const char * IDENT_PARSER3_C="$Id: parser3.C,v 1.366 2024/12/11 18:35:31 moko Exp $"; +volatile const char * IDENT_PARSER3_C="$Id: parser3.C,v 1.371 2026/09/27 19:40:38 moko Exp $"; #include "pa_config_includes.h" @@ -65,15 +65,6 @@ static char** argv_extra = NULL; static THREAD_LOCAL Request_info *request_info_4log = NULL; // global for correct log() reporting static const char* filespec_4log = NULL; // null only if system-wide auto.p used -template static T *dir_pos(T *fname){ - T *result=NULL; - while (fname=strpbrk(fname, "/\\")){ - result=fname; - fname++; - } - return result; -} - const char *parser3_log_filespec() { // $status:log-filename const char* slog=log_filespec; @@ -85,7 +76,7 @@ const char *parser3_log_filespec() { // static char log_spec[MAX_STRING + 12 /* '/parser3.log' */]; pa_strncpy(log_spec, filespec_4log, MAX_STRING); - if(char* log_dir_pos=dir_pos(log_spec)){ + if(char* log_dir_pos=strrpbrk(log_spec, "/\\")){ strcpy(log_dir_pos, "/parser3.log"); } else { // no path, just filename @@ -204,11 +195,7 @@ size_t SAPI::send_body(SAPI_Info& info, static const char* full_disk_path(const char* file_name = "") { char* result; - if(file_name[0]=='/' -#ifdef WIN32 - || file_name[0] && file_name[1]==':' -#endif - ){ + if(file_name[0]=='/' || is_os_absolute_path(file_name)){ result=pa_strdup(file_name); } else { char cwd[MAX_STRING]; @@ -247,7 +234,7 @@ static const char* locate_config(const c if(!filespec_4log) filespec_4log=getenv(REDIRECT_PREFIX PARSER_CONFIG_ENV_NAME); if(!filespec_4log){ - const char* exec_dir_pos = dir_pos(executable_path); + const char* exec_dir_pos = strrpbrk(executable_path, "/\\"); #ifdef SYSTEM_CONFIG_FILE if(exec_dir_pos){ #endif @@ -487,9 +474,11 @@ static void real_parser_handler(bool cgi const char* request_method=getenv("REQUEST_METHOD"); - if(!filespec_to_process) - SAPI::die("Parser/%s", PARSER_VERSION); - + if(!filespec_to_process){ + SAPI::send_error(*sapi_info, "Parser/" PARSER_VERSION); + exit(1); + } + // global request info Request_info request_info; RequestInfoController ric(&request_info, sapi_info); @@ -592,7 +581,7 @@ static void call_real_parser_handler__su } __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 %p", er->ExceptionCode, er->ExceptionAddress); else throw Exception("system", 0, ""); else @@ -615,7 +604,7 @@ static void usage(const char* message=NU printf( "Parser/%s\n" - "Copyright (c) 2001-2024 Art. Lebedev Studio (http://www.artlebedev.com)\n" + "Copyright (c) 2001-2026 Art. Lebedev Studio (https://www.artlebedev.com)\n" "Authors: Konstantin Morshnev , Alexandr Petrosian \n" "\n" "Usage: %s [options] [file]\n"