--- parser3/src/main/untaint.C 2001/03/25 10:30:43 1.21 +++ parser3/src/main/untaint.C 2001/04/03 07:32:46 1.30 @@ -5,7 +5,7 @@ Author: Alexander Petrosyan (http://design.ru/paf) - $Id: untaint.C,v 1.21 2001/03/25 10:30:43 paf Exp $ + $Id: untaint.C,v 1.30 2001/04/03 07:32:46 paf Exp $ */ #include "pa_config_includes.h" @@ -65,13 +65,16 @@ 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 optimize whitespaces for all but 'html' +/** + @test optimize whitespaces for all but 'html' + @todo fix theoretical \n mem overrun in TYPO replacements +*/ char *String::store_to(char *dest) const { // $MAIN:html-typo table Table *user_typo_table=static_cast(pool().tag()); @@ -80,18 +83,18 @@ 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: + case UL_CLEAN: // clean piece - case UL_YES: + case UL_TAINTED: // tainted piece, but undefined untaint language - // for VString.get_double of tainted values + // for VString.as_double of tainted values // for ^process{body} evaluation case UL_AS_IS: // tainted, untaint language: as-is @@ -161,7 +164,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; @@ -170,8 +172,9 @@ char *String::store_to(char *dest) const case '\r': if(typo_table) { *dest++='\\'; *dest++='n'; // \r -> \n - if(src[1]=='\n') // \r\n -> remove \n - src++; + if(src[1]=='\n') { // \r\n -> remove \n + size--; src++; + } } break; case '\n': @@ -229,7 +232,6 @@ char *String::store_to(char *dest) const static_cast(row->item.lang), i); } - row++; } chunk=row->link; } while(chunk);