|
|
| version 1.134, 2005/06/28 14:43:46 | version 1.134.6.2.2.1, 2006/03/01 18:44:55 |
|---|---|
| Line 1 | Line 1 |
| /** @file | /** @file |
| Parser: String class part: untaint mechanizm. | Parser: String class part: untaint mechanizm. |
| Copyright(c) 2001-2004 ArtLebedev Group (http://www.artlebedev.com) | Copyright(c) 2001-2006 ArtLebedev Group (http://www.artlebedev.com) |
| Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru) | Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru) |
| */ | */ |
| Line 92 inline bool need_http_header_encode(unsi | Line 92 inline bool need_http_header_encode(unsi |
| return need_uri_encode(c); | return need_uri_encode(c); |
| } | } |
| inline bool need_regex_escape(unsigned char c){ | |
| return strchr("\\^$.[]|()?*+{}", c)!=0; | |
| } | |
| // String | // String |
| Line 371 int cstr_to_string_body_block(char alang | Line 374 int cstr_to_string_body_block(char alang |
| bool email=false; | bool email=false; |
| uchar c; | uchar c; |
| for(const char* src=mail_ptr; (c=(uchar)*src++); ) { | for(const char* src=mail_ptr; (c=(uchar)*src++); ) { |
| if(c=='\r' || c=='\n') | |
| c=' '; | |
| if(to_quoted_printable && (c==',' || c == '"' || addr_spec_soon(src-1/*position to 'c'*/))) { | if(to_quoted_printable && (c==',' || c == '"' || addr_spec_soon(src-1/*position to 'c'*/))) { |
| email=c=='<'; | email=c=='<'; |
| to_string("?="); | to_string("?="); |
| Line 463 int cstr_to_string_body_block(char alang | Line 468 int cstr_to_string_body_block(char alang |
| default: _default; break; | default: _default; break; |
| }); | }); |
| break; | break; |
| case String::L_REGEX: | |
| // tainted, untaint language: regex | |
| escape( | |
| if(need_regex_escape(c)) | |
| to_char('\\') | |
| _default; | |
| ); | |
| break; | |
| default: | default: |
| SAPI::abort("unknown untaint language #%d", | SAPI::abort("unknown untaint language #%d", |
| static_cast<int>(to_lang)); // should never | static_cast<int>(to_lang)); // should never |