--- parser3/src/classes/string.C 2013/03/10 18:45:07 1.207 +++ parser3/src/classes/string.C 2013/10/17 21:52:32 1.211 @@ -20,7 +20,7 @@ #include "pa_vregex.h" #include "pa_charsets.h" -volatile const char * IDENT_STRING_C="$Id: string.C,v 1.207 2013/03/10 18:45:07 moko Exp $"; +volatile const char * IDENT_STRING_C="$Id: string.C,v 1.211 2013/10/17 21:52:32 moko Exp $"; // class @@ -454,7 +454,7 @@ static void _match(Request& r, MethodPar }; if(is_junction){ - Temp_value_element temp( *replacement_code->get_junction()->method_frame, match_var_name, vtable); + Temp_value_element temp(r, *replacement_code->get_junction()->method_frame, match_var_name, vtable); src.match(vregex, replace_action, &info, matches_count); } else { src.match(vregex, replace_action, &info, matches_count); @@ -486,14 +486,14 @@ class String_sql_event_handlers: public bool got_column; public: bool got_cell; - String& result; + const String* result; public: String_sql_event_handlers( const String& astatement_string, const char* astatement_cstr): statement_string(astatement_string), statement_cstr(astatement_cstr), got_column(false), got_cell(false), - result(*new String) {} + result(&String::Empty) {} bool add_column(SQL_Error& error, const char* /*str*/, size_t /*length*/) { if(got_column) { @@ -507,7 +507,7 @@ public: } bool before_rows(SQL_Error& /*error*/ ) { /* ignore */ return false; } bool add_row(SQL_Error& /*error*/) { /* ignore */ return false; } - bool add_row_cell(SQL_Error& error, const char* str, size_t length) { + bool add_row_cell(SQL_Error& error, const char* str, size_t) { if(got_cell) { error=SQL_Error(PARSER_RUNTIME, //statement_string, @@ -517,7 +517,7 @@ public: try { got_cell=true; - result.append_know_length(str, length, String::L_TAINTED); + result=new String(str, String::L_TAINTED /* no length as 0x00 can be inside */ ); return false; } catch(...) { error=SQL_Error("exception occured in String_sql_event_handlers::add_row_cell"); @@ -587,7 +587,7 @@ const String* sql_result_string(Request& if(!handlers.got_cell) return 0; // no lines, caller should return second param[default value] - return &handlers.result; + return handlers.result; } static void _sql(Request& r, MethodParams& params) { @@ -659,7 +659,7 @@ static void _save(Request& r, MethodPara const String& file_name=params.as_string(file_name_index, FILE_NAME_MUST_BE_STRING); const String& src=GET_SELF(r, VString).string(); - String::Body sbody=src.cstr_to_string_body_untaint(String::L_AS_IS, r.connection(false/*no error if none*/)); + String::Body sbody=src.cstr_to_string_body_untaint(String::L_AS_IS, r.connection(false), &r.charsets); // write file_write(r.charsets, r.absolute(file_name), sbody.cstr(), sbody.length(), true, do_append, asked_charset);