From: naruse@... Date: 2017-03-22T13:27:35+00:00 Subject: [ruby-dev:50033] [Ruby trunk Bug#13352][Rejected] RegExp infinite looping Issue #13352 has been updated by naruse (Yui NARUSE). Status changed from Open to Rejected 323字目の * を削ってください。 ``` (?=\W)\W?(?:(?:(?:\/\*<)?[\'\"]?([\w_\$]+)[\'\"]?(?:>\*\/\s+this)?|(this))\.(\$scope|json)|([\'\"](?:\$scope|json)[\'\"]))((\.)(inputObjects)|(\.)(spreadSheets)(?:\.[\'\"]?([^\.\'\"\|\s,]+)[\'\"]?|\[[\'\"]?((?:[^\'\"\]\[]*|\[[^\]]*\])*)[\'\"]?\])(\.)(model))\s*(?:\.[\'\"]?([^\.\'\"\|\s,]+)[\'\"]?|\[[\'\"]?((?:[^\'\"\]\[]|\[[^\]]*\])*)[\'\"]?\]) ``` 正規表現の解析には例えば以下のサイトを使うことが出来ます。 https://regex101.com/ この類の正規表現を検出するのはトレードオフがあるのでRubyもnodeも標準では難しいと思いますが、 nodeならば例えば https://github.com/uhop/node-re2 だとこの問題を回避できます。 ---------------------------------------- Bug #13352: RegExp infinite looping https://bugs.ruby-lang.org/issues/13352#change-63730 * Author: jumnichi_kose (小瀬 淳一) * Status: Rejected * Priority: Normal * Assignee: * Target version: * ruby -v: 2.3.3p222 (2016-11-21 revision 56859) [x64-mingw32], ruby 2.2.4p230 (2015-12-16 revision 53155) [i386-mingw32] * Backport: 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN ---------------------------------------- ruby entered an infinite loop with the following three steps. ~~~ ruby r = /(?=\W)\W?(?:(?:(?:\/\*<)?[\'\"]?([\w_\$]+)[\'\"]?(?:>\*\/\s+this)?|(this))\.(\$scope|json)|([\'\"](?:\$scope|json)[\'\"]))((\.)(inputObjects)|(\.)(spreadSheets)(?:\.[\'\"]?([^\.\'\"\|\s,]+)[\'\"]?|\[[\'\"]?((?:[^\'\"\]\[]*|\[[^\]]*\])*)[\'\"]?\])(\.)(model))\s*(?:\.[\'\"]?([^\.\'\"\|\s,]+)[\'\"]?|\[[\'\"]?((?:[^\'\"\]\[]*|\[[^\]]*\])*)[\'\"]?\])/ txt = ".model |,| 'anController'.$scope.inputObjects['fieldName .../* !! comment ...*/" txt.scan r ~~~ Node.js also falls into an infinite loop. ~~~ javascript var r = /(?=\W)\W?(?:(?:(?:\/\*<)?[\'\"]?([\w_\$]+)[\'\"]?(?:>\*\/\s+this)?|(this))\.(\$scope|json)|([\'\"](?:\$scope|json)[\'\"]))((\.)(inputObjects)|(\.)(spreadSheets)(?:\.[\'\"]?([^\.\'\"\|\s,]+)[\'\"]?|\[[\'\"]?((?:[^\'\"\]\[]*|\[[^\]]*\])*)[\'\"]?\])(\.)(model))\s*(?:\.[\'\"]?([^\.\'\"\|\s,]+)[\'\"]?|\[[\'\"]?((?:[^\'\"\]\[]*|\[[^\]]*\])*)[\'\"]?\])/ var txt = ".model |,| 'anController'.$scope.inputObjects['fieldName .../* !! comment ...*/" var s =r.exec (txt) console.log(s) ~~~ -- https://bugs.ruby-lang.org/