--- parser3/src/main/pa_http.C 2009/09/10 10:11:18 1.43 +++ parser3/src/main/pa_http.C 2010/08/10 05:27:46 1.47 @@ -5,7 +5,7 @@ Author: Alexandr Petrosian (http://paf.design.ru) */ -static const char * const IDENT_HTTP_C="$Date: 2009/09/10 10:11:18 $"; +static const char * const IDENT_HTTP_C="$Date: 2010/08/10 05:27:46 $"; #include "pa_http.h" #include "pa_common.h" @@ -405,7 +405,7 @@ static void form_value2string( const char* pa_form2string(HashStringValue& form, Request_charsets& charsets) { String string; form.for_each(form_value2string, &string); - return string.transcode_and_untaint_cstr(String::L_URI, &charsets); + return string.untaint_and_transcode_cstr(String::L_URI, &charsets); } struct FormPart { @@ -577,9 +577,7 @@ File_read_http_result pa_internal_file_r } if(valid_options!=options->count()) - throw Exception(PARSER_RUNTIME, - 0, - INVALID_OPTION_PASSED); + throw Exception(PARSER_RUNTIME, 0, CALLED_WITH_INVALID_OPTION); } if(!asked_remote_charset) // defaulting to $request:charset asked_remote_charset=&(r.charsets).source(); @@ -618,7 +616,7 @@ File_read_http_result pa_internal_file_r // influence URLencoding of tainted pieces to String::L_URI lang Temp_client_charset temp(r.charsets, *asked_remote_charset); - const char* connect_string_cstr=connect_string.transcode_and_untaint_cstr(String::L_URI, &(r.charsets)); + const char* connect_string_cstr=connect_string.untaint_and_transcode_cstr(String::L_URI, &(r.charsets)); const char* current=connect_string_cstr; if(strncmp(current, "http://", 7)!=0) @@ -694,7 +692,7 @@ File_read_http_result pa_internal_file_r // $.body was specified if(content_type_url_encoded){ // transcode + url-encode - body_cstr=vbody->as_string().transcode_and_untaint_cstr(String::L_URI, &(r.charsets)); + body_cstr=vbody->as_string().untaint_and_transcode_cstr(String::L_URI, &(r.charsets)); } else { // content-type != application/x-www-form-urlencoded -> transcode only, don't url-encode! body_cstr=Charset::transcode( @@ -729,14 +727,14 @@ File_read_http_result pa_internal_file_r } else throw Exception(PARSER_RUNTIME, 0, - "cookies param must be hash"); + "cookies param must be hash"); } if(body_cstr) head << "Content-Length: " << format(post_size, "%u") << CRLF; // head + end of header - request_head_and_body << head.transcode_and_untaint_cstr(String::L_URI, &(r.charsets)) << CRLF; + request_head_and_body << head.untaint_and_transcode_cstr(String::L_URI, &(r.charsets)) << CRLF; // body if(body_cstr) @@ -744,7 +742,7 @@ File_read_http_result pa_internal_file_r } const char* request_cstr=request_head_and_body.cstr(); - size_t request_size=strlen(request_cstr); + size_t request_size=request_head_and_body.length(); if(multipart) request_size=file_untaint(request_cstr, request_size); @@ -825,6 +823,8 @@ File_read_http_result pa_internal_file_r // skip UTF-8 signature (BOM code) raw_body+=3; raw_body_size-=3; + if(!real_remote_charset) + real_remote_charset=&UTF8_charset; } // output response