Project

General

Profile

Bug #17126

Updated by AndyMaleh (Andy Maleh) over 3 years ago

Hi, I don't know if I'm misunderstanding how `String#gsub` works, but I encountered an issue in the Ruby "git" gem with escaping single quotes for shell, quotes, which I fixed and [contributed back](https://github.com/ruby-git/ruby-git/pull/480). 

 I thought I'd report here too since it was caused by Ruby `String#gsub` malfunctioning, just malfunctioning in case there is a bug in Ruby. 

 **Description:** 

 When calling `String#gsub("'", "'\\''")` on a String that contains a single-quote (e.g. `"Hello ' World"`), it `String#gsub(str, replacement)` is duplicating the a substring following outside the single-quote in the returned String instead of simply replacing the single-quote with escaped single quotes. 

   

 **Code to Demonstrate Problem:** 

 ```ruby 
 "Hello ' World".gsub('\'', '\'\\\'\'') 
 ``` 

 or 

 ```ruby 
 "Hello ' World".gsub("'", "'\\''") 
 ``` 

 or 

 ```ruby 
 "Hello ' World".gsub(/'/, "'\\''") 
 ``` 

 **Output:** 

 ``` 
  => "Hello ' World' World" 
 ``` 

 **Expected Output:** 

 ``` 
  => "Hello '\'' World" 
 ``` 

 In fact, I tested this same regex replacement in Java and got the expected output above. 

 I look forward to hearing back about this puzzling problem. 

 Perhaps it is not a bug and I am just misunderstanding how `String#gsub` works in Ruby as I noticed it behaves the same exact way in JRuby too. 

 Best regards, 

 Andy Maleh

Back