Issue #15938 has been updated by jeremyevans0 (Jeremy Evans).


dlee (David Lee) wrote:
> Thank you for the update. We know that Ruby 2.5+ has fixed this issue, but we were hoping the fix could be backported. Do you know if there is any workaround to reliably get Regexp to throw those errors?

You could bisect the repository for changes between 2.4 and 2.5 to see which commit fixed the issue, and apply the that commit as a custom patch to Ruby in your installation (assuming it applies cleanly).

As I mentioned earlier, Ruby 2.4 is in security maintenance phase, and this issue is not a security issue, and thus we would not backport patches to Ruby 2.4 fix it.

----------------------------------------
Bug #15938: Error thrown undeterministically: `RegexpError: empty range in char class`
https://bugs.ruby-lang.org/issues/15938#change-78725

* Author: dlee (David Lee)
* Status: Rejected
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: 2.4.6
* Backport: 2.4: UNKNOWN, 2.5: UNKNOWN, 2.6: UNKNOWN
----------------------------------------
When instantiating a Regexp, we only sometimes see `RegexpError: empty range in char class`.

To reproduce:
`100.times { Regexp.new("^([\\w'+-.%]+@[\\w-.]+\\.[A-Za-z]{2,25})(,[\\w+-.%]+@[\\w-.]+\\.[A-Za-z]{2,4}){0,4}$") }`
usually does not throw the error, but
`100000.times { Regexp.new("^([\\w'+-.%]+@[\\w-.]+\\.[A-Za-z]{2,25})(,[\\w+-.%]+@[\\w-.]+\\.[A-Za-z]{2,4}){0,4}$") }`
usually throws the error.

Furthermore, sometimes accompanying calls matter:
`10.times { Regexp.new("[\\w-.]"); Regexp.new("[\\w-]") }`
usually does not throw the error, but
`10.times { Regexp.new("[\\w-.]") }`
usually throws the error.



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>