From: "normalperson (Eric Wong)" Date: 2013-02-25T21:54:36+09:00 Subject: [ruby-core:52876] [ruby-trunk - Bug #7957][Open] rb_str_modify() does not prevent shared string from rb_str_set_len() Issue #7957 has been reported by normalperson (Eric Wong). ---------------------------------------- Bug #7957: rb_str_modify() does not prevent shared string from rb_str_set_len() https://bugs.ruby-lang.org/issues/7957 Author: normalperson (Eric Wong) Status: Open Priority: Normal Assignee: Category: Target version: ruby -v: ruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-linux] unicorn HTTP chunk parser may raise "can't set length of shared string (RuntimeError)" in rb_str_set_len(). However, it does call rb_str_modify() before calling rb_str_set_len(). To reproduce: git clone git://bogomips.org/unicorn cd unicorn gem install isolate # needed for unicorn dependencies git reset --hard v4.6.1 make http # build HTTP parser (needs ragel installed: apt-get install ragel) ruby -I lib str_modify.rb # failure, raises # apply unicorn_http.patch patch -p1 < unicorn_http.patch make http # rebuild parser ruby -I lib str_modify.rb # success (no output) In my proposed patch, I call rb_str_resize() instead of rb_str_set_len() and that seems to work around the issue. I even call rb_str_modify() an extra time before rb_str_set_len(), but rb_str_set_len() still raises... -- http://bugs.ruby-lang.org/