[ruby-trunk - Bug #6143][Open] Onigmo allows broken regexp: /(?(x.)/

Issue #6143 has been reported by Yusuke E…


Bug #6143: Onigmo allows broken regexp: /(?(x.)/
https://bugs.ruby-lang.org/issues/6143

Author: Yusuke E.
Status: Open
Priority: Normal
Assignee: Yui NARUSE
Category:
Target version:
ruby -v: ruby 2.0.0dev (2012-03-14 trunk 35017) [i686-linux]

naruse さん、k-takata さん
遠藤です。

Onigmo の条件式正規表現のパースでエラーチェックが足りないようです。

$ ./miniruby -e ‘p /(?(x.)/’
/(?(x.)/

マッチさせると、未初期化変数を使って分岐とかしてしまうようです。

$ valgrind ./miniruby -e ‘“x”[/(?(x)/]’
(略)
==25802== Conditional jump or move depends on uninitialised value(s)
==25802== at 0x210DE2: match_at (regexec.c:2875)
==25802== by 0x214F09: onig_search_gpos (regexec.c:4172)
==25802== by 0x215B02: onig_search (regexec.c:3877)
==25802== by 0x1FE91A: rb_reg_search (re.c:1373)
==25802== by 0x242A98: rb_str_aref_m (string.c:3128)
==25802== by 0x287E04: call_cfunc (vm_insnhelper.c:365)
==25802== by 0x299FC6: vm_call_method (vm_insnhelper.c:452)
==25802== by 0x28CB03: vm_exec_core (insns.def:1906)
==25802== by 0x2934A9: vm_exec (vm.c:1223)
==25802== by 0x29B5CA: rb_iseq_eval_main (vm.c:1463)
==25802== by 0x1615D3: ruby_exec_internal (eval.c:204)
==25802== by 0x48EE112: (below main) (libc-start.c:226)
(略)

regparse.c の parse_enclose の

4970 case ‘(’: /* conditional expression: (?(cond)yes),
(?(cond)yes|no) */

あたりをご確認ください。

このバグは Coverity Scan さんが見つけてくれました。


Yusuke E. [email protected]

Issue #6143 has been updated by Ken Takata.

Onigmoのmasterブランチには修正を入れました。
https://github.com/k-takata/Onigmo/commit/35f530676970e42b83b5d6789dd5820101e430d7

現在のOnigmoは、条件式の条件には番号または名前による後方参照しか使えないのですが、それ以外のものをエラーではじいていませんでした。

Bug #6143: Onigmo allows broken regexp: /(?(x.)/
https://bugs.ruby-lang.org/issues/6143#change-24607

Author: Yusuke E.
Status: Open
Priority: Normal
Assignee: Yui NARUSE
Category:
Target version:
ruby -v: ruby 2.0.0dev (2012-03-14 trunk 35017) [i686-linux]

naruse さん、k-takata さん
遠藤です。

Onigmo の条件式正規表現のパースでエラーチェックが足りないようです。

$ ./miniruby -e ‘p /(?(x.)/’
/(?(x.)/

マッチさせると、未初期化変数を使って分岐とかしてしまうようです。

$ valgrind ./miniruby -e ‘“x”[/(?(x)/]’
(略)
==25802== Conditional jump or move depends on uninitialised value(s)
==25802== at 0x210DE2: match_at (regexec.c:2875)
==25802== by 0x214F09: onig_search_gpos (regexec.c:4172)
==25802== by 0x215B02: onig_search (regexec.c:3877)
==25802== by 0x1FE91A: rb_reg_search (re.c:1373)
==25802== by 0x242A98: rb_str_aref_m (string.c:3128)
==25802== by 0x287E04: call_cfunc (vm_insnhelper.c:365)
==25802== by 0x299FC6: vm_call_method (vm_insnhelper.c:452)
==25802== by 0x28CB03: vm_exec_core (insns.def:1906)
==25802== by 0x2934A9: vm_exec (vm.c:1223)
==25802== by 0x29B5CA: rb_iseq_eval_main (vm.c:1463)
==25802== by 0x1615D3: ruby_exec_internal (eval.c:204)
==25802== by 0x48EE112: (below main) (libc-start.c:226)
(略)

regparse.c の parse_enclose の

4970 case ‘(’: /* conditional expression: (?(cond)yes),
(?(cond)yes|no) */

あたりをご確認ください。

このバグは Coverity Scan さんが見つけてくれました。


Yusuke E. [email protected]

Issue #6143 has been updated by naruse (Yui NARUSE).

Status changed from Assigned to Closed


Bug #6143: Onigmo allows broken regexp: /(?(x.)/
https://bugs.ruby-lang.org/issues/6143#change-25028

Author: mame (Yusuke E.)
Status: Closed
Priority: Normal
Assignee: naruse (Yui NARUSE)
Category:
Target version:
ruby -v: ruby 2.0.0dev (2012-03-14 trunk 35017) [i686-linux]

naruse さん、k-takata さん
遠藤です。

Onigmo の条件式正規表現のパースでエラーチェックが足りないようです。

$ ./miniruby -e ‘p /(?(x.)/’
/(?(x.)/

マッチさせると、未初期化変数を使って分岐とかしてしまうようです。

$ valgrind ./miniruby -e ‘“x”[/(?(x)/]’
(略)
==25802== Conditional jump or move depends on uninitialised value(s)
==25802== at 0x210DE2: match_at (regexec.c:2875)
==25802== by 0x214F09: onig_search_gpos (regexec.c:4172)
==25802== by 0x215B02: onig_search (regexec.c:3877)
==25802== by 0x1FE91A: rb_reg_search (re.c:1373)
==25802== by 0x242A98: rb_str_aref_m (string.c:3128)
==25802== by 0x287E04: call_cfunc (vm_insnhelper.c:365)
==25802== by 0x299FC6: vm_call_method (vm_insnhelper.c:452)
==25802== by 0x28CB03: vm_exec_core (insns.def:1906)
==25802== by 0x2934A9: vm_exec (vm.c:1223)
==25802== by 0x29B5CA: rb_iseq_eval_main (vm.c:1463)
==25802== by 0x1615D3: ruby_exec_internal (eval.c:204)
==25802== by 0x48EE112: (below main) (libc-start.c:226)
(略)

regparse.c の parse_enclose の

4970 case ‘(’: /* conditional expression: (?(cond)yes),
(?(cond)yes|no) */

あたりをご確認ください。

このバグは Coverity Scan さんが見つけてくれました。


Yusuke E. [email protected]

Issue #6143 has been updated by k_takata (Ken Takata).

OnigmoのRubyマージ作業用ブランチにも修正を反映しました。
https://github.com/k-takata/Onigmo/tree/tmp/ruby-2.0.x

Bug #6143: Onigmo allows broken regexp: /(?(x.)/
https://bugs.ruby-lang.org/issues/6143#change-24977

Author: mame (Yusuke E.)
Status: Assigned
Priority: Normal
Assignee: naruse (Yui NARUSE)
Category:
Target version:
ruby -v: ruby 2.0.0dev (2012-03-14 trunk 35017) [i686-linux]

naruse さん、k-takata さん
遠藤です。

Onigmo の条件式正規表現のパースでエラーチェックが足りないようです。

$ ./miniruby -e ‘p /(?(x.)/’
/(?(x.)/

マッチさせると、未初期化変数を使って分岐とかしてしまうようです。

$ valgrind ./miniruby -e ‘“x”[/(?(x)/]’
(略)
==25802== Conditional jump or move depends on uninitialised value(s)
==25802== at 0x210DE2: match_at (regexec.c:2875)
==25802== by 0x214F09: onig_search_gpos (regexec.c:4172)
==25802== by 0x215B02: onig_search (regexec.c:3877)
==25802== by 0x1FE91A: rb_reg_search (re.c:1373)
==25802== by 0x242A98: rb_str_aref_m (string.c:3128)
==25802== by 0x287E04: call_cfunc (vm_insnhelper.c:365)
==25802== by 0x299FC6: vm_call_method (vm_insnhelper.c:452)
==25802== by 0x28CB03: vm_exec_core (insns.def:1906)
==25802== by 0x2934A9: vm_exec (vm.c:1223)
==25802== by 0x29B5CA: rb_iseq_eval_main (vm.c:1463)
==25802== by 0x1615D3: ruby_exec_internal (eval.c:204)
==25802== by 0x48EE112: (below main) (libc-start.c:226)
(略)

regparse.c の parse_enclose の

4970 case ‘(’: /* conditional expression: (?(cond)yes),
(?(cond)yes|no) */

あたりをご確認ください。

このバグは Coverity Scan さんが見つけてくれました。


Yusuke E. [email protected]

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs