--- parser3/src/main/untaint.C 2003/02/04 12:08:57 1.115.2.8 +++ parser3/src/main/untaint.C 2003/03/03 13:44:26 1.115.2.11 @@ -5,7 +5,7 @@ Author: Alexandr Petrosian (http://paf.design.ru) */ -static const char* IDENT_UNTAINT_C="$Date: 2003/02/04 12:08:57 $"; +static const char* IDENT_UNTAINT_C="$Date: 2003/03/03 13:44:26 $"; #include "pa_pool.h" #include "pa_string.h" @@ -140,15 +140,21 @@ inline bool need_quote_http_header(const or marking ALL pieces of it with a @a lang when @a forced to, and propagating OPTIMIZE language bit. */ -String& String::append_to(String& dest, uchar lang, bool forced) const { +String& String::append_to(String& dest, String_UL lang, bool forced) const { if(is_empty()) return dest; - // without language-chage, small[fitting dest tail] string? - if(lang==UL_PASS_APPENDED && fused<=(dest.fallocated-dest.fused)) { + // without language-chage string? + if(lang==UL_PASS_APPENDED) { + // can simply append elements + ssize_t delta=fused-(dest.fallocated-dest.fused); + if(delta>0) // they don't fit? + dest.expand(delta); + // felements[fused...]=src.felements[0..fused], fused+=src.fused memcpy(&dest.felements[dest.fused], felements, sizeof(felements[0])*fused); dest.fused+=fused; + dest.fsize+=fsize; return dest; } @@ -192,7 +198,7 @@ size_t String::cstr_bufsize(Untaint_lang const Request_charsets *charsets) const { size_t dest=1; // for terminating 0 STRING_FOREACH_FRAGMENT( - uchar to_lang=lang==UL_UNSPECIFIED?fragment->lang:lang; + String_UL to_lang=lang==UL_UNSPECIFIED?fragment->lang:lang; switch(to_lang & ~UL_OPTIMIZE_BIT) { case UL_CLEAN: @@ -320,7 +326,7 @@ char *String::store_to(char *dest, Untai // STRING_FOREACH_FRAGMENT( element_type *last = felements+fused; element_type *fragment = felements; for(; fragmentlang:lang; + String_UL to_lang=lang==UL_UNSPECIFIED?fragment->lang:lang; char *start=dest; @@ -516,7 +522,7 @@ IFNDEF_NO_STRING_ORIGIN( else dest+=sprintf(dest, ""); ); - uchar show_lang=fragment->lang & ~UL_OPTIMIZE_BIT; + String_UL show_lang=fragment->lang & ~UL_OPTIMIZE_BIT; if(show_lang>=sizeof(String_Untaint_lang_name)/sizeof(String_Untaint_lang_name[0])) throw Exception(Exception::undefined_type, Exception::undefined_source,