Bug #20421
closedString#index and String#byteindex don't clear `$~` when offset > size (or bytesize)
Description
When String#index and String#byteindex are called with Regexp and offset they clear $~
(that contains result of the last Regexp matching) when offset < -size. But they don't clear $~
when offset > size what seems inconsistent:
"a".index(/a/)
p $~ # => #<MatchData "a">
string = "blablabla"
string.index(/bla/, string.length + 1)
p $~ # => #<MatchData "a">
Updated by andrykonchin (Andrew Konchin) 11 months ago
- Description updated (diff)
Updated by jeremyevans0 (Jeremy Evans) 10 months ago
- Status changed from Open to Closed
- Backport changed from 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN to 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: DONTNEED
The issue doesn't affect 3.3 and master. It appears fixed by 9dcdffb8bf8a3654fd78bf1a58b30c8e13888a7a. If you would like the fix backported to 3.2, please respond.
Updated by Eregon (Benoit Daloze) 10 months ago
- Backport changed from 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: DONTNEED to 3.0: REQUIRED, 3.1: REQUIRED, 3.2: REQUIRED, 3.3: DONTNEED
Given this is a clear bug (which can break programs' logic) I think it's good to backport.
Updated by Eregon (Benoit Daloze) 10 months ago
We should also add a test so this doesn't regress on 3.3 & master, that seems fine as a ruby_bug
spec in ruby/spec.
Updated by hsbt (Hiroshi SHIBATA) 10 months ago
- Backport changed from 3.0: REQUIRED, 3.1: REQUIRED, 3.2: REQUIRED, 3.3: DONTNEED to 3.1: REQUIRED, 3.2: REQUIRED, 3.3: DONTNEED
Updated by byroot (Jean Boussier) 10 months ago
I got a ruby-bug spec at https://github.com/ruby/ruby/pull/10750
As for 9dcdffb8bf8a3654fd78bf1a58b30c8e13888a7a, it might make sense to make a more targeted fix for backport, as this is a more general refactor.
Updated by byroot (Jean Boussier) 10 months ago
Here's more targeted patch for Ruby 3.2: https://github.com/ruby/ruby/pull/10751
Updated by nagachika (Tomoyuki Chikanaga) 9 months ago
- Backport changed from 3.1: REQUIRED, 3.2: REQUIRED, 3.3: DONTNEED to 3.1: REQUIRED, 3.2: DONE, 3.3: DONTNEED
Thank you for the PR. I agree that the patch is good to backport. PR merged at 449899b38314d0ecbe61e42d34398bdf2561b8e9.