--- parser3/src/classes/file.C 2013/07/21 15:16:44 1.228 +++ parser3/src/classes/file.C 2015/01/12 12:13:25 1.232 @@ -25,7 +25,7 @@ #include "pa_vregex.h" #include "pa_version.h" -volatile const char * IDENT_FILE_C="$Id: file.C,v 1.228 2013/07/21 15:16:44 moko Exp $"; +volatile const char * IDENT_FILE_C="$Id: file.C,v 1.232 2015/01/12 12:13:25 misha Exp $"; // defines @@ -354,7 +354,7 @@ static void _create(Request& r, MethodPa VFile& self=GET_SELF(r, VFile); if(const String* content_str=vcontent.get_string()){ - String::Body body=content_str->cstr_to_string_body_untaint(String::L_AS_IS); // explode content, honor tainting changes + String::Body body=content_str->cstr_to_string_body_untaint(String::L_AS_IS, r.connection(false), &r.charsets); // explode content, honor tainting changes if(asked_charset && is_text) body=Charset::transcode(body, r.charsets.source(), *asked_charset); self.set(true/*tainted*/, is_text, body.cstrm(), body.length(), file_name, vcontent_type, &r); @@ -450,7 +450,7 @@ static void pass_cgi_header_attribute( static void append_to_argv(Request& r, ArrayString& argv, const String* str){ if(!str->is_empty()) - argv+=new String(str->cstr_to_string_body_untaint(String::L_AS_IS, 0, &r.charsets), String::L_AS_IS); + argv+=new String(str->cstr_to_string_body_untaint(String::L_AS_IS, r.connection(false), &r.charsets), String::L_AS_IS); } /// @todo fix `` in perl - they produced flipping consoles and no output to perl @@ -486,7 +486,7 @@ static void _exec_cgi(Request& r, Method // const ECSTR(GATEWAY_INTERFACE, "CGI/1.1"); - ECSTR("PARSER_VERSION", PARSER_VERSION); + ECSTR(PARSER_VERSION, PARSER_VERSION); // from Request.info ECSTR(DOCUMENT_ROOT, r.request_info.document_root); ECSTR(PATH_TRANSLATED, r.request_info.path_translated); @@ -521,7 +521,7 @@ static void _exec_cgi(Request& r, Method if(info.vstdin) { if(const String* sstdin=info.vstdin->get_string()) { // untaint stdin - in = new String(sstdin->cstr_to_string_body_untaint(String::L_AS_IS), String::L_AS_IS); + in = new String(sstdin->cstr_to_string_body_untaint(String::L_AS_IS, r.connection(false), &r.charsets), String::L_AS_IS); } else if(VFile* vfile=static_cast(info.vstdin->as("file"))) in->append_know_length((const char* )vfile->value_ptr(), vfile->value_size(), String::L_TAINTED); @@ -699,6 +699,7 @@ static void _list(Request& r, MethodPara } if(Value* value=options->get("filter")) { vfilter=value; + valid_options++; } if(valid_options!=options->count()) throw Exception(PARSER_RUNTIME, 0, CALLED_WITH_INVALID_OPTION); @@ -739,9 +740,9 @@ static void _list(Request& r, MethodPara if(stat) { ffblk.stat_file(); *row+=VDouble(ffblk.size()).get_string(); - *row+=new String(String::Body::Format(ffblk.c_timestamp()), String::L_CLEAN); - *row+=new String(String::Body::Format(ffblk.m_timestamp()), String::L_CLEAN); - *row+=new String(String::Body::Format(ffblk.a_timestamp()), String::L_CLEAN); + *row+=new String(String::Body::Format((int)ffblk.c_timestamp()), String::L_CLEAN); + *row+=new String(String::Body::Format((int)ffblk.m_timestamp()), String::L_CLEAN); + *row+=new String(String::Body::Format((int)ffblk.a_timestamp()), String::L_CLEAN); } table+=row; }