From: Yusuke ENDOH Date: 2008-08-01T21:47:21+09:00 Subject: [ruby-dev:35715] encoding.c should use ruby_strdup 遠藤です。 encoding.c の中で生の strdup を使っていて返り値の検査をしていない ため、failmalloc でいじめると落ちます。 $ FAILMALLOC_SPACE=0x10 \ > LD_PRELOAD=/home/mame/local/lib/libfailmalloc.so \ > ./ruby Segmentation fault encoding.c で #include "ruby/util.h" して、ruby_strdup を使わせる ようにすると直ります。反対がなければコミットしたいと思います。 Index: encoding.c =================================================================== --- encoding.c (revision 18307) +++ encoding.c (working copy) @@ -16,6 +16,7 @@ #ifdef HAVE_LANGINFO_H #include #endif +#include "ruby/util.h" static ID id_encoding, id_base_encoding; VALUE rb_cEncoding; Index: common.mk =================================================================== --- common.mk (revision 18307) +++ common.mk (working copy) @@ -451,7 +451,7 @@ dmyencoding.$(OBJEXT): {$(VPATH)}dmyencoding.c \ {$(VPATH)}encoding.c $(RUBY_H_INCLUDES) {$(VPATH)}st.h \ {$(VPATH)}encoding.h {$(VPATH)}oniguruma.h {$(VPATH)}regenc.h -encoding.$(OBJEXT): dmyencoding.$(OBJEXT) +encoding.$(OBJEXT): dmyencoding.$(OBJEXT) {$(VPATH)}util.h enum.$(OBJEXT): {$(VPATH)}enum.c $(RUBY_H_INCLUDES) \ {$(VPATH)}st.h {$(VPATH)}node.h {$(VPATH)}util.h enumerator.$(OBJEXT): {$(VPATH)}enumerator.c $(RUBY_H_INCLUDES) \ あと、事後になりますが、vm.c の中で生の malloc を使ってチェック するようにしました (r18306) 。また、gc.c の中で rb_memerror() を 呼ぶ前に during_gc = 0; するようにしました (r18307) 。 -- Yusuke ENDOH