Bug #6366


Regex freezes Ruby

Added by vertis (Luke Chadwick) over 9 years ago. Updated over 9 years ago.

Target version:
ruby -v:
ruby 1.8.7 (2011-06-30 patchlevel 352) [i686-darwin11.3.0]


I stumbled across a weird error on Ruby 1.8.7p352, where String.match locks up:


I had, apparently, pasted a regular expression into a file(bash) that I was testing, and commented it out. I'm assuming I did this to clear my clipboard. I was then running the following match on each line in the file & consistently had the ruby interpreter lockup (not even Ctrl-C was working, though Ctrl-Z did).

I have replicated this on both MacOS (homebrew) and CentOS 6 1.8.7p352, but this doesn't happen in Ruby 1.9.2p0.

Updated by nobu (Nobuyoshi Nakada) over 9 years ago

  • Status changed from Open to Rejected

It's due to the bad regexp.

You should not repeat repetitive operators (({"([\w_]*)+?"})), which causes combinatorial explosion.

Try with (({"([\w_]+?)"})).

Updated by vertis (Luke Chadwick) over 9 years ago

Sure, that works. You're absolutely correct about my regex error.

However, I still think it's a bug. The behaviour should be to fail with an Exception not lockup indefinitely.

Updated by shyouhei (Shyouhei Urabe) over 9 years ago

No, sorry. You cant detect whether your program locks up.

Updated by vertis (Luke Chadwick) over 9 years ago

Right, but you could detect bad patterns in the regex like the double repetition. How does Ruby 1.9 NOT freeze?

Updated by nobu (Nobuyoshi Nakada) over 9 years ago

Oniguruma, the regex engine in 1.9, optimizes it in its parser.
But 1.8 doesn't, and has no future.


Also available in: Atom PDF