From: nobu@... Date: 2016-07-30T01:17:27+00:00 Subject: [ruby-core:76618] [Ruby trunk Bug#12636][Closed] string.gsub(/([a-z](?=[A-Z._ ]))/, "#{$1} ") returns wrong result (possible C-string leak?) Issue #12636 has been updated by Nobuyoshi Nakada. Status changed from Open to Closed ---------------------------------------- Bug #12636: string.gsub(/([a-z](?=[A-Z._ ]))/, "#{$1} ") returns wrong result (possible C-string leak?) https://bugs.ruby-lang.org/issues/12636#change-59835 * Author: Mike McFadden * Status: Closed * Priority: Normal * Assignee: * ruby -v: ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin15] * Backport: 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN ---------------------------------------- Verified in Ruby 2.1, 2.2, and 2.3. > "Hello.World".gsub(/([a-z](?=[A-Z._ ]))/, "#{$1} ") => "Hell .World" ^ wrong answer; it should be `"Hello .World"` > "Hello.World".gsub(/([a-z](?=[A-Z._ ]))/, "#{$1} ") => "Hello .World" ^ running it a second time in the same IRB session now returns the correct result, however... > "Help.World".gsub(/([a-z](?=[A-Z._ ]))/, "#{$1} ") => "Helo .World" ^ now the p turned into an o somehow? It's clearly retaining strings from the previous invocation and reusing them, but not updating every byte. Here's the equivalent code in JavaScript, which returns the correct result every time: "Hello.World".replace(/([a-z](?=[A-Z._ ]))/g, "$1 ") -- https://bugs.ruby-lang.org/ Unsubscribe: