[ruby-dev:50033] [Ruby trunk Bug#13352][Rejected] RegExp infinite looping
From:
naruse@...
Date:
2017-03-22 13:27:35 UTC
List:
ruby-dev #50033
Issue #13352 has been updated by naruse (Yui NARUSE). Status changed from Open to Rejected 323=E5=AD=97=E7=9B=AE=E3=81=AE * =E3=82=92=E5=89=8A=E3=81=A3=E3=81=A6=E3=81= =8F=E3=81=A0=E3=81=95=E3=81=84=E3=80=82 ``` (?=3D\W)\W?(?:(?:(?:\/\*<)?[\'\"]?([\w_\$]+)[\'\"]?(?:>\*\/\s+this)?|(this)= )\.(\$scope|json)|([\'\"](?:\$scope|json)[\'\"]))((\.)(inputObjects)|(\.)(s= preadSheets)(?:\.[\'\"]?([^\.\'\"\|\s,]+)[\'\"]?|\[[\'\"]?((?:[^\'\"\]\[]*|= \[[^\]]*\])*)[\'\"]?\])(\.)(model))\s*(?:\.[\'\"]?([^\.\'\"\|\s,]+)[\'\"]?|= \[[\'\"]?((?:[^\'\"\]\[]|\[[^\]]*\])*)[\'\"]?\]) ``` =E6=AD=A3=E8=A6=8F=E8=A1=A8=E7=8F=BE=E3=81=AE=E8=A7=A3=E6=9E=90=E3=81=AB=E3= =81=AF=E4=BE=8B=E3=81=88=E3=81=B0=E4=BB=A5=E4=B8=8B=E3=81=AE=E3=82=B5=E3=82= =A4=E3=83=88=E3=82=92=E4=BD=BF=E3=81=86=E3=81=93=E3=81=A8=E3=81=8C=E5=87=BA= =E6=9D=A5=E3=81=BE=E3=81=99=E3=80=82 https://regex101.com/ =E3=81=93=E3=81=AE=E9=A1=9E=E3=81=AE=E6=AD=A3=E8=A6=8F=E8=A1=A8=E7=8F=BE=E3= =82=92=E6=A4=9C=E5=87=BA=E3=81=99=E3=82=8B=E3=81=AE=E3=81=AF=E3=83=88=E3=83= =AC=E3=83=BC=E3=83=89=E3=82=AA=E3=83=95=E3=81=8C=E3=81=82=E3=82=8B=E3=81=AE= =E3=81=A7Ruby=E3=82=82node=E3=82=82=E6=A8=99=E6=BA=96=E3=81=A7=E3=81=AF=E9= =9B=A3=E3=81=97=E3=81=84=E3=81=A8=E6=80=9D=E3=81=84=E3=81=BE=E3=81=99=E3=81= =8C=E3=80=81 node=E3=81=AA=E3=82=89=E3=81=B0=E4=BE=8B=E3=81=88=E3=81=B0 https://github.c= om/uhop/node-re2 =E3=81=A0=E3=81=A8=E3=81=93=E3=81=AE=E5=95=8F=E9=A1=8C=E3= =82=92=E5=9B=9E=E9=81=BF=E3=81=A7=E3=81=8D=E3=81=BE=E3=81=99=E3=80=82 ---------------------------------------- Bug #13352: RegExp infinite looping https://bugs.ruby-lang.org/issues/13352#change-63730 * Author: jumnichi_kose (=E5=B0=8F=E7=80=AC =E6=B7=B3=E4=B8=80) * Status: Rejected * Priority: Normal * Assignee:=20 * Target version:=20 * ruby -v: 2.3.3p222 (2016-11-21 revision 56859) [x64-mingw32], ruby 2.2.4= p230 (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 =3D /(?=3D\W)\W?(?:(?:(?:\/\*<)?[\'\"]?([\w_\$]+)[\'\"]?(?:>\*\/\s+this)?= |(this))\.(\$scope|json)|([\'\"](?:\$scope|json)[\'\"]))((\.)(inputObjects)= |(\.)(spreadSheets)(?:\.[\'\"]?([^\.\'\"\|\s,]+)[\'\"]?|\[[\'\"]?((?:[^\'\"= \]\[]*|\[[^\]]*\])*)[\'\"]?\])(\.)(model))\s*(?:\.[\'\"]?([^\.\'\"\|\s,]+)[= \'\"]?|\[[\'\"]?((?:[^\'\"\]\[]*|\[[^\]]*\])*)[\'\"]?\])/ txt =3D ".model |,| 'anController'.$scope.inputObjects['fieldName .../* !! = comment ...*/" txt.scan r ~~~ Node.js also falls into an infinite loop. ~~~ javascript var r =3D /(?=3D\W)\W?(?:(?:(?:\/\*<)?[\'\"]?([\w_\$]+)[\'\"]?(?:>\*\/\s+th= is)?|(this))\.(\$scope|json)|([\'\"](?:\$scope|json)[\'\"]))((\.)(inputObje= cts)|(\.)(spreadSheets)(?:\.[\'\"]?([^\.\'\"\|\s,]+)[\'\"]?|\[[\'\"]?((?:[^= \'\"\]\[]*|\[[^\]]*\])*)[\'\"]?\])(\.)(model))\s*(?:\.[\'\"]?([^\.\'\"\|\s,= ]+)[\'\"]?|\[[\'\"]?((?:[^\'\"\]\[]*|\[[^\]]*\])*)[\'\"]?\])/ var txt =3D ".model |,| 'anController'.$scope.inputObjects['fieldName .../*= !! comment ...*/" var s =3Dr.exec (txt) console.log(s) ~~~ --=20 https://bugs.ruby-lang.org/