Diff for /parser3/src/main/untaint.C between versions 1.118.2.2 and 1.118.2.4

version 1.118.2.2, 2003/09/23 10:37:05 version 1.118.2.4, 2003/09/23 14:00:53
Line 172  struct Append_fragment_info { Line 172  struct Append_fragment_info {
         String::Language lang;          String::Language lang;
         const StringBody dest_body;          const StringBody dest_body;
         String::Languages* dest_languages;          String::Languages* dest_languages;
           size_t dest_body_plan_length;
 };  };
 #endif  #endif
 int append_fragment_optimizing(char alang, size_t asize, Append_fragment_info* info) {  int append_fragment_optimizing(char alang, size_t asize, Append_fragment_info* info) {
Line 180  int append_fragment_optimizing(char alan Line 181  int append_fragment_optimizing(char alan
         // 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
         info->dest_languages->append(info->dest_body,           info->dest_languages->append(info->dest_body_plan_length, 
                 lang==String::Language::L_TAINTED?                  lang==String::Language::L_TAINTED?
                         info->lang                          info->lang
                         :lang==String::Language::L_CLEAN?                          :lang==String::Language::L_CLEAN?
                                 (String::Language)(String::Language::L_CLEAN|String::Language::L_OPTIMIZE_BIT) // ORing with OPTIMIZED flag                                  (String::Language)(String::Language::L_CLEAN|String::Language::L_OPTIMIZE_BIT) // ORing with OPTIMIZED flag
                                 :lang,                                  :lang,
                 asize);                  asize);
           info->dest_body_plan_length+=asize;
   
         return 0; // 0=continue          return 0; // 0=continue
 }  }
 int append_fragment_nonoptimizing(char alang, size_t asize, Append_fragment_info* info) {  int append_fragment_nonoptimizing(char alang, size_t asize, Append_fragment_info* info) {
         const String::Language lang=(String::Language)alang;          const String::Language lang=(String::Language)alang;
         // The core idea: tainted pieces got marked with context's lang          // The core idea: tainted pieces got marked with context's lang
         info->dest_languages->append(info->dest_body,           info->dest_languages->append(info->dest_body_plan_length, 
                 lang==String::Language::L_TAINTED?                  lang==String::Language::L_TAINTED?
                         info->lang                          info->lang
                         :lang,                          :lang,
                 asize);                  asize);
           info->dest_body_plan_length+=asize;
   
         return 0; // 0=continue          return 0; // 0=continue
 }  }
Line 215  String& String::append_to(String& dest, Line 218  String& String::append_to(String& dest,
         // first: fragment infos          // first: fragment infos
                   
         if(lang==L_PASS_APPENDED) // without language-change?          if(lang==L_PASS_APPENDED) // without language-change?
                 dest.langs.append(dest.body, body, langs);                  dest.langs.append(dest.body, body.length(), langs);
         else if(forced) //forcing passed lang?          else if(forced) //forcing passed lang?
                 dest.langs.append(dest.body, lang, length());                  dest.langs.append(dest.body, lang, length());
         else {           else { 
                 Append_fragment_info info={lang, dest.body, &dest.langs};                  Append_fragment_info info={lang, dest.body, &dest.langs, dest.body.length()};
             langs.for_each(body, lang&L_OPTIMIZE_BIT?              langs.for_each(body, lang&L_OPTIMIZE_BIT?
                         append_fragment_optimizing                          append_fragment_optimizing
                         :append_fragment_nonoptimizing, &info);                          :append_fragment_nonoptimizing, &info);
Line 228  String& String::append_to(String& dest, Line 231  String& String::append_to(String& dest,
         // next: letters          // next: letters
         dest.body<<body;          dest.body<<body;
   
           ASSERT_STRING_INVARIANT(dest);
         return dest;          return dest;
 }  }
   
Line 506  StringBody String::cstr_to_string_body(L Line 510  StringBody String::cstr_to_string_body(L
         body.set_pos(info.pos, 0);          body.set_pos(info.pos, 0);
         info.fragment_begin=0;          info.fragment_begin=0;
         info.whitespace=true;          info.whitespace=true;
           
         langs.for_each(body, cstr_to_string_body_block, &info);          if(!is_empty())
                   langs.for_each(body, cstr_to_string_body_block, &info);
   
         return StringBody(CORD_ec_to_cord(info.result));          return StringBody(CORD_ec_to_cord(info.result));
 }  }

Removed from v.1.118.2.2  
changed lines
  Added in v.1.118.2.4


E-mail: