Diff for /parser3/src/main/untaint.C between versions 1.115.2.12.2.7 and 1.115.2.12.2.12

version 1.115.2.12.2.7, 2003/03/20 15:05:59 version 1.115.2.12.2.12, 2003/03/24 16:08:35
Line 144  inline bool need_quote_http_header(const Line 144  inline bool need_quote_http_header(const
         or marking ALL pieces of it with a @a lang when @a forced to,          or marking ALL pieces of it with a @a lang when @a forced to,
         and propagating OPTIMIZE language bit.          and propagating OPTIMIZE language bit.
 */  */
 String& String::append_to(String& dest, Untaint_lang lang, bool forced) const {  String& String::append_to(String& dest, Language lang, bool forced) const {
         if(!*this)          if(is_empty())
                 return dest;                  return dest;
   
         // first: letters          // first: letters
         dest.body=CORD_cat(dest.body, body);          dest.body.append(body);
   
         // next: fragment infos          // next: fragment infos
                   
         if(lang==UL_PASS_APPENDED) // without language-chage string?          if(lang==L_PASS_APPENDED) // without language-chage string?
                 dest.fragments.append(fragments, 0, fragments.count());                  dest.fragments.append(fragments);
         else if(forced) //forcing passed lang?          else if(forced) //forcing passed lang?
                 dest.fragments+=Fragment(lang, length());                  dest.fragments+=Fragment(lang, length());
         else if(lang&UL_OPTIMIZE_BIT) {          else if(lang&L_OPTIMIZE_BIT) {
                 Array_iterator<ArrayFragment::element_type> i(fragments);                  Array_iterator<ArrayFragment::element_type> i(fragments);
                 while(i.has_next()) {                  while(i.has_next()) {
                         const Fragment& fragment=i.next();                          const Fragment& fragment=i.next();
Line 165  String& String::append_to(String& dest, Line 165  String& String::append_to(String& dest,
                         // tainted piece would get OPTIMIZED bit from 'lang'                          // tainted piece would get OPTIMIZED bit from 'lang'
                         // clean piece would be marked OPTIMIZED manually                          // clean piece would be marked OPTIMIZED manually
                         // pieces with determined languages [not tainted|clean] would retain theirs langs                          // pieces with determined languages [not tainted|clean] would retain theirs langs
                         dest.fragments+=Fragment(static_cast<Untaint_lang>(                          dest.fragments+=Fragment(static_cast<Language>(
                                 fragment.lang==UL_TAINTED?lang:(                                  fragment.lang==L_TAINTED?lang:(
                                         fragment.lang==UL_CLEAN?UL_CLEAN|UL_OPTIMIZE_BIT: // ORing with OPTIMIZED flag                                          fragment.lang==L_CLEAN?L_CLEAN|L_OPTIMIZE_BIT: // ORing with OPTIMIZED flag
                                                 fragment.lang)),                                                  fragment.lang)),
                                 fragment.length);                                  fragment.length);
                 }                  }
Line 176  String& String::append_to(String& dest, Line 176  String& String::append_to(String& dest,
                 while(i.has_next()) {                  while(i.has_next()) {
                         const Fragment& fragment=i.next();                          const Fragment& fragment=i.next();
                         dest.fragments+=Fragment(                          dest.fragments+=Fragment(
                                 fragment.lang==UL_TAINTED?lang:fragment.lang,                                  fragment.lang==L_TAINTED?lang:fragment.lang,
                                 fragment.length);                                  fragment.length);
                 }                  }
         }          }
Line 217  inline bool mail_header_char_valid_withi Line 217  inline bool mail_header_char_valid_withi
                 || c>='0' && c<='9'                  || c>='0' && c<='9'
                 || strchr("!*+-/", c);                  || strchr("!*+-/", c);
 }  }
 inline void ec_append(CORD_ec result, CORD_pos& pos, size_t size) {  inline void ec_append(CORD_ec& result, CORD_pos& pos, size_t size) {
         while(size--) {          while(size--) {
                 CORD_ec_append(result, CORD_pos_fetch(pos));                  CORD_ec_append(result, CORD_pos_fetch(pos));
                 CORD_next(pos);                  CORD_next(pos);
         }          }
 }  }
 CORD String::cstr_to_cord(Untaint_lang lang,   StringBody String::cstr_to_string_body(Language lang, 
                   SQL_Connection *connection,                    SQL_Connection* connection,
                   const Request_charsets *charsets) const {                    const Request_charsets *charsets) const {
         CORD_ec result; CORD_ec_init(result);          CORD_ec result; CORD_ec_init(result);
         CORD_pos pos; CORD_set_pos(pos, body, 0);          CORD_pos pos; body.set_pos(pos, 0);
   
         bool whitespace=true;          bool whitespace=true;
   
Line 237  CORD String::cstr_to_cord(Untaint_lang l Line 237  CORD String::cstr_to_cord(Untaint_lang l
                 const Fragment& fragment=i.next();                  const Fragment& fragment=i.next();
                 size_t fragment_length=fragment.length;                  size_t fragment_length=fragment.length;
                 fragment_end=fragment_begin+fragment_length;                  fragment_end=fragment_begin+fragment_length;
                   //fprintf(stderr, "%d, %d\n", fragment.lang, fragment.length);
   
                 Untaint_lang to_lang=lang==UL_UNSPECIFIED?fragment.lang:lang;                  Language to_lang=lang==L_UNSPECIFIED?fragment.lang:lang;
   
                 switch(to_lang & ~UL_OPTIMIZE_BIT) {                  switch(to_lang & ~L_OPTIMIZE_BIT) {
                 case UL_CLEAN:                  case L_CLEAN:
                 case UL_TAINTED:                  case L_TAINTED:
                 case UL_AS_IS:                  case L_AS_IS:
                         // clean piece                          // clean piece
   
                         // tainted piece, but undefined untaint language                          // tainted piece, but undefined untaint language
Line 253  CORD String::cstr_to_cord(Untaint_lang l Line 254  CORD String::cstr_to_cord(Untaint_lang l
                         // tainted, untaint language: as-is                          // tainted, untaint language: as-is
                         ec_append(result, pos, fragment_length);                          ec_append(result, pos, fragment_length);
                         break;                          break;
                 case UL_FILE_SPEC:                  case L_FILE_SPEC:
                         // tainted, untaint language: file [name]                          // tainted, untaint language: file [name]
                         escape(                          escape(
                                 // Macintosh has problems with small Russian letter 'r'                                  // Macintosh has problems with small Russian letter 'r'
Line 265  CORD String::cstr_to_cord(Untaint_lang l Line 266  CORD String::cstr_to_cord(Untaint_lang l
                         );                          );
                         break;                          break;
 #ifdef LATER  #ifdef LATER
                 case UL_URI:                  case L_URI:
                         // tainted, untaint language: uri                          // tainted, untaint language: uri
                         {                          {
                                 const char *substr=                                  const char *substr=
Line 288  CORD String::cstr_to_cord(Untaint_lang l Line 289  CORD String::cstr_to_cord(Untaint_lang l
                         }                          }
                         break;                          break;
 #endif  #endif
                 case UL_HTTP_HEADER:                  case L_HTTP_HEADER:
                         // tainted, untaint language: http-field-content-text                          // tainted, untaint language: http-field-content-text
                         escape(                          escape(
                                 encode(need_uri_encode, '%');                                  encode(need_uri_encode, '%');
                         );                          );
                         break;                          break;
 #ifdef LATER  #ifdef LATER
                 case UL_MAIL_HEADER:                  case L_MAIL_HEADER:
                         // tainted, untaint language: mail-header                          // tainted, untaint language: mail-header
                         // http://www.ietf.org/rfc/rfc2047.txt                          // http://www.ietf.org/rfc/rfc2047.txt
                         if(charsets) {                          if(charsets) {
Line 342  CORD String::cstr_to_cord(Untaint_lang l Line 343  CORD String::cstr_to_cord(Untaint_lang l
                         }                          }
                         break;                          break;
 #endif  #endif
                 case UL_TABLE:                   case L_TABLE: 
                         // tainted, untaint language: table                          // tainted, untaint language: table
                         escape(switch(c) {                          escape(switch(c) {
                                 case '\t': to_char(' ');  break;                                  case '\t': to_char(' ');  break;
Line 351  CORD String::cstr_to_cord(Untaint_lang l Line 352  CORD String::cstr_to_cord(Untaint_lang l
                         });                          });
                         break;                          break;
 #ifdef PA_SQL  #ifdef PA_SQL
                 case UL_SQL:                  case L_SQL:
                         // tainted, untaint language: sql                          // tainted, untaint language: sql
                         if(connection) {                          if(connection) {
                                 dest+=connection->quote(0,                                   dest+=connection->quote(0, 
Line 366  CORD String::cstr_to_cord(Untaint_lang l Line 367  CORD String::cstr_to_cord(Untaint_lang l
                                         "untaint in SQL language failed - no connection specified");                                          "untaint in SQL language failed - no connection specified");
                         break;                          break;
 #endif  #endif
                 case UL_JS:                  case L_JS:
                         escape(switch(c) {                          escape(switch(c) {
                                 case '"': to_string("\\\"");  break;                                  case '"': to_string("\\\"");  break;
                                 case '\'': to_string("\\'");  break;                                  case '\'': to_string("\\'");  break;
Line 376  CORD String::cstr_to_cord(Untaint_lang l Line 377  CORD String::cstr_to_cord(Untaint_lang l
                                 _default;                                  _default;
                         });                          });
                         break;                          break;
                 case UL_XML:                  case L_XML:
                         escape(switch(c) {                          escape(switch(c) {
                                 case '&': to_string("&amp;");  break;                                  case '&': to_string("&amp;");  break;
                                 case '>': to_string("&gt;");  break;                                  case '>': to_string("&gt;");  break;
Line 386  CORD String::cstr_to_cord(Untaint_lang l Line 387  CORD String::cstr_to_cord(Untaint_lang l
                                 _default;                                  _default;
                         });                          });
                         break;                          break;
                 case UL_HTML:                  case L_HTML:
                         escape(switch(c) {                          escape(switch(c) {
                                 case '&': to_string("&amp;");  break;                                  case '&': to_string("&amp;");  break;
                                 case '>': to_string("&gt;");  break;                                  case '>': to_string("&gt;");  break;
Line 403  CORD String::cstr_to_cord(Untaint_lang l Line 404  CORD String::cstr_to_cord(Untaint_lang l
                         break; // never                          break; // never
                 }                  }
 #ifdef LATER  #ifdef LATER
                 if(to_lang & UL_OPTIMIZE_BIT) {                   if(to_lang & L_OPTIMIZE_BIT) { 
                         // optimizing whitespace                          // optimizing whitespace
                         char *stop=dest;  dest=start;                          char *stop=dest;  dest=start;
                         for(char c=start; src<stop; src++)                          for(char c=start; src<stop; src++)
Line 425  CORD String::cstr_to_cord(Untaint_lang l Line 426  CORD String::cstr_to_cord(Untaint_lang l
 #endif  #endif
         }          }
   
         return CORD_ec_to_cord(result);          return StringBody(CORD_ec_to_cord(result));
 }  }

Removed from v.1.115.2.12.2.7  
changed lines
  Added in v.1.115.2.12.2.12


E-mail: