Actions
Bug #21165
closed
引数なしで起動するとSegmentatino Fault
ruby -v:
ruby 3.4.2 (2025-02-15 revision d2930f8e7a) +PRISM [x86_64-netbsd]
Description
引数なしでrubyを起動すると、Segmentation Faultで落ちます。(そういう使い方をすることは稀だったため、気づいていませんでした。)
https://mail-index.netbsd.org/pkgsrc-changes/2025/02/09/msg317142.html
https://mail-index.netbsd.org/pkgsrc-users/2025/02/28/msg041167.html
- Prismを使用していると発生します。
- pkgsrcの外でビルドした場合でも再現します。
原因は prism.c のpm_parse_stream_read()
の第3引数の関数ポインターの名前がfgets
と
なっていて、pm_parse_stream_read()
では、これを使って関数呼び出しをしています。
ところが、何故か標準ライブラリのfgets(3)を呼び出してしまって落ちていたというのが真相
でした。
引数で渡された関数ポインターを使って呼び出すのが本来の動作とは思いますが、敢えて標準
ライブラリと同じ名前を使用するのは、このような意図しない挙動を引き起こす可能性がある
ので、避けるべきではないかと思います。
添付のパッチで問題は解消しました。
% uname -rsmp
NetBSD 10.1_STABLE amd64 x86_64
% sh configure --enable-pthread --without-git
...
% make
...
% gdb ruby
...
(gdb) run
Starting program: /var/tmp/ruby-3.4.2/ruby
[New LWP 1009 of process 2755]
`RubyGems' were not loaded.
`error_highlight' was not loaded.
`did_you_mean' was not loaded.
`syntax_suggest' was not loaded.
Thread 1 "" received signal SIGSEGV, Segmentation fault.
rb_econv_close (ec=0x4) at transcode.c:1735
1735 if (ec->replacement_allocated) {
(gdb) where
#0 rb_econv_close (ec=0x4) at transcode.c:1735
#1 0x00000001dc969c5c in clear_readconv (fptr=0x7dfcda961040) at io.c:5636
#2 clear_codeconv (fptr=0x7dfcda961040) at io.c:5655
#3 io_encoding_set (fptr=fptr@entry=0x7dfcda961040, v1=v1@entry=4,
v2=v2@entry=4, opt=opt@entry=4) at io.c:11759
#4 0x00000001dc96c0ec in rb_io_set_encoding (argc=<optimized out>,
argc@entry=1, argv=argv@entry=0x7f7ffff88a30, io=138524952599320)
at io.c:13519
#5 0x00000001dc97b0d6 in rb_stdio_set_default_encoding () at io.c:13540
#6 0x00000001dca70987 in process_options (argc=0, argc@entry=1,
argv=<optimized out>, opt=opt@entry=0x7f7ffff89380) at ruby.c:2561
#7 0x00000001dca71f60 in ruby_process_options (argc=argc@entry=1,
argv=argv@entry=0x7f7ffff895a8) at ruby.c:228
#8 0x00000001dc923a61 in ruby_options (argc=argc@entry=1,
argv=argv@entry=0x7f7ffff895a8) at eval.c:117
#9 0x00000001dcbded22 in rb_main (argv=0x7f7ffff895a8, argc=1) at ./main.c:43
#10 main (argc=<optimized out>, argv=<optimized out>) at ./main.c:68
Files
Actions
Like0
Like0Like0