Project

General

Profile

Feature #15251

Updated by chopraanmol1 (Anmol Chopra) almost 2 years ago

I'm not sure if current behavior is expected one or a bug. So fell free to change tracker type. 

 Currently Hash aset checks if non-tainted string exists in fstring table or not, if it doesn't does not then ruby duplicates string and freeze it. This works well for string_literal because they are already registered in fstring table during compilation, but it doesn't work for non-string literal. 

 Patch 

 https://github.com/ruby/ruby/pull/1993 

 O/P of attached file on trunk: 
 ~~~ 
 string_literal => 1 
 string times 1 => 1 
 string times 3 string times 3 string times 3    => 100 
 interpolated_string => 100 
 string add => 100 
 string append => 100 
 -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
 fstring 
 -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
 string_literal => 1 
 string times 1 => 1 
 string times 3 string times 3 string times 3    => 1 
 interpolated_string => 1 
 string add => 1 
 string append => 1 
 -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
 fstring + GC 
 -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
 string_literal => 1 
 string times 1 => 1 
 string times 3 string times 3 string times 3    => 100 
 interpolated_string => 100 
 string add => 100 
 string append => 100 
 ~~~ 

 after patch 
 ~~~ 
 string_literal => 1 
 string times 1 => 1 
 string times 3 string times 3 string times 3    => 1 
 interpolated_string => 1 
 string add => 1 
 string append => 1 
 -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
 fstring 
 -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
 string_literal => 1 
 string times 1 => 1 
 string times 3 string times 3 string times 3    => 1 
 interpolated_string => 1 
 string add => 1 
 string append => 1 
 -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
 fstring + GC 
 -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
 string_literal => 1 
 string times 1 => 1 
 string times 3 string times 3 string times 3    => 1 
 interpolated_string => 1 
 string add => 1 
 string append => 1 
 ~~~ 

Back