--- parser3/src/main/untaint.C 2001/03/29 08:34:48 1.26 +++ parser3/src/main/untaint.C 2001/04/04 10:50:36 1.32 @@ -5,7 +5,7 @@ Author: Alexander Petrosyan (http://design.ru/paf) - $Id: untaint.C,v 1.26 2001/03/29 08:34:48 paf Exp $ + $Id: untaint.C,v 1.32 2001/04/04 10:50:36 paf Exp $ */ #include "pa_config_includes.h" @@ -15,6 +15,7 @@ #include "pa_hash.h" #include "pa_exception.h" #include "pa_table.h" +#include "pa_globals.h" #define escape(action) \ { \ @@ -43,7 +44,11 @@ inline bool need_file_encode(unsigned ch if((c>='0') &&(c<='9') ||(c>='A') &&(c<='Z') ||(c>='a') &&(c<='z')) return false; - return !strchr("./", c); + return !strchr( +#ifdef WIN32 + ":\\" +#endif + "./", c); } inline bool need_uri_encode(unsigned char c){ if((c>='0') &&(c<='9') ||(c>='A') &&(c<='Z') ||(c>='a') &&(c<='z')) @@ -65,14 +70,17 @@ static bool typo_present(Array::Item *va const char *src=static_cast(info); int partial; - row->get_string(0)->cmp(src, partial); + row->get_string(0)->cmp(partial, src); return partial==0 || // full match partial==1; // typo left column starts 'src' } -/// @todo @b now: optimize whitespaces for all but 'html' -char *String::store_to(char *dest) const { +/** + @test optimize whitespaces for all but 'html' + @todo fix theoretical \n mem overrun in TYPO replacements +*/ +char *String::store_to(char *dest, Untaint_lang lang) const { // $MAIN:html-typo table Table *user_typo_table=static_cast(pool().tag()); Table *typo_table=user_typo_table?user_typo_table:default_typo_table; @@ -80,16 +88,16 @@ char *String::store_to(char *dest) const const Chunk *chunk=&head; do { const Chunk::Row *row=chunk->rows; - for(int i=0; icount; i++) { + for(size_t i=0; icount; i++, row++) { if(row==append_here) goto break2; // WARNING: // string can grow only UNTAINT_TIMES_BIGGER - switch(row->item.lang) { - case UL_NO: + switch(lang==UL_UNKNOWN?row->item.lang:lang) { + case UL_CLEAN: // clean piece - case UL_YES: + case UL_TAINTED: // tainted piece, but undefined untaint language // for VString.as_double of tainted values // for ^process{body} evaluation @@ -161,7 +169,6 @@ char *String::store_to(char *dest) const // and rather replace \ and n into huge strings // thus causing memory overrun // this can be dealed by allocating *2 memory, but that's too expensive - // todo parser4: fix that size_t html_for_typo_size; { // local dest char *dest=html_for_typo; @@ -230,7 +237,6 @@ char *String::store_to(char *dest) const static_cast(row->item.lang), i); } - row++; } chunk=row->link; } while(chunk);