diff options
| author | TOMITA Masahiro <[email protected]> | 2014-11-23 21:26:50 +0900 |
|---|---|---|
| committer | TOMITA Masahiro <[email protected]> | 2014-11-23 21:26:50 +0900 |
| commit | 0a0afa7c6a6800be61b53404fea33dcce339d0ea (patch) | |
| tree | fd141ac7ea60507d2062878ec22d920139df1f6f | |
| parent | 2c04f4029fba8adf19bc93ba913a9b257028dacf (diff) | |
| download | mruby-0a0afa7c6a6800be61b53404fea33dcce339d0ea.tar.gz mruby-0a0afa7c6a6800be61b53404fea33dcce339d0ea.zip | |
Fix String#slice! raise TypeError or return invalid value.
| -rw-r--r-- | mrbgems/mruby-string-ext/mrblib/string.rb | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/mrbgems/mruby-string-ext/mrblib/string.rb b/mrbgems/mruby-string-ext/mrblib/string.rb index b8cb93199..34744cc38 100644 --- a/mrbgems/mruby-string-ext/mrblib/string.rb +++ b/mrbgems/mruby-string-ext/mrblib/string.rb @@ -181,6 +181,7 @@ class String ed = arg1.end beg += self.size if beg < 0 ed += self.size if ed < 0 + ed -= 1 if arg1.exclude_end? validated = true elsif arg1.kind_of?(String) validated = true @@ -198,18 +199,18 @@ class String unless str == nil || str == "" if arg1 != nil && arg2 !=nil idx = arg1 >= 0 ? arg1 : self.size+arg1 - str2 = self[0...idx] + self[idx+arg2..-1] + str2 = self[0...idx] + self[idx+arg2..-1].to_s else if arg1.kind_of?(Range) idx = beg >= 0 ? beg : self.size+beg idx2 = ed>= 0 ? ed : self.size+ed - str2 = self[0...idx] + self[idx2+1..-1] + str2 = self[0...idx] + self[idx2+1..-1].to_s elsif arg1.kind_of?(String) idx = self.index(arg1) str2 = self[0...idx] + self[idx+arg1.size..-1] unless idx == nil else idx = arg1 >= 0 ? arg1 : self.size+arg1 - str2 = self[0...idx] + self[idx+1..-1] + str2 = self[0...idx] + self[idx+1..-1].to_s end end self.replace(str2) unless str2 == nil |
