Well, I managed to provoke Ruby into SEGVing with this same code:
Is this something to do with the latest lazy dup in string.c?
(gdb) bt
#0 0x4008bab1 in __kill () from /lib/libc.so.6
#1 0x4008b6bf in raise (sig=6) at ../sysdeps/posix/raise.c:27
#2 0x4008cef3 in abort () at ../sysdeps/generic/abort.c:88
#3 0x80af3bd in rb_bug (fmt=0x80c33ca "Segmentation fault") at error.c:162
#4 0x80973cd in sigsegv (sig=11) at signal.c:372
#5 0x4008b9b8 in __restore () at ../sysdeps/unix/sysv/linux/i386/sigaction.c:125
#6 0x809a4ad in rb_str_dup (str=1075316652) at string.c:182
#7 0x809c406 in str_gsub (argc=2, argv=0xbfff9b64, str=1075316652, bang=0) at string.c:1155
#8 0x809c6f6 in rb_str_gsub (argc=2, argv=0xbfff9b64, str=1075316652) at string.c:1249
#9 0x8058ad5 in call_cfunc (func=0x809c6e0 <rb_str_gsub>, recv=1075316652, len=-1, argc=2,
argv=0xbfff9b64) at eval.c:3876
#10 0x805908f in rb_call0 (klass=1075408352, recv=1075316652, id=4161, argc=2, argv=0xbfff9b64,
..