Project

General

Profile

Actions

Bug #20421

closed

String#index and String#byteindex don't clear `$~` when offset > size (or bytesize)

Added by andrykonchin (Andrew Konchin) 7 months ago. Updated 6 months ago.

Status:
Closed
Assignee:
-
Target version:
-
[ruby-core:117494]

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">
Actions #1

Updated by andrykonchin (Andrew Konchin) 7 months ago

  • Description updated (diff)

Updated by jeremyevans0 (Jeremy Evans) 6 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) 6 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) 6 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.

Actions #5

Updated by hsbt (Hiroshi SHIBATA) 6 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) 6 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) 6 months ago

Here's more targeted patch for Ruby 3.2: https://github.com/ruby/ruby/pull/10751

Updated by nagachika (Tomoyuki Chikanaga) 6 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.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0