From: chopraanmol1@... Date: 2018-10-24T13:07:04+00:00 Subject: [ruby-core:89549] [Ruby trunk Feature#15251] Hash aset should deduplicate non tainted string Issue #15251 has been reported by chopraanmol1 (Anmol Chopra). ---------------------------------------- Feature #15251: Hash aset should deduplicate non tainted string https://bugs.ruby-lang.org/issues/15251 * Author: chopraanmol1 (Anmol Chopra) * Status: Open * Priority: Normal * Assignee: * Target version: ---------------------------------------- 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 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 ~~~ ---Files-------------------------------- test_hash_keys_deduped.rb (927 Bytes) -- https://bugs.ruby-lang.org/ Unsubscribe: