diff options
| author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-06-28 12:25:45 +0000 |
|---|---|---|
| committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-06-28 12:25:45 +0000 |
| commit | 2a592c65a31ed0b8da81a9ce0ad375d5c17aa8b9 (patch) | |
| tree | 6ef0adfb397248308136bd096c7dc3241b782809 /ChangeLog | |
| parent | 436defcc87afef2a730847c1ca54649bbbda1dcd (diff) | |
| download | ruby-2a592c65a31ed0b8da81a9ce0ad375d5c17aa8b9.tar.gz ruby-2a592c65a31ed0b8da81a9ce0ad375d5c17aa8b9.tar.xz ruby-2a592c65a31ed0b8da81a9ce0ad375d5c17aa8b9.zip | |
* include/ruby/ruby.h (struct RRegexp): new field usecnt. replace
str and len by src.
* gc.c (gc_mark_children): mark src field of regexp.
(obj_free): don't free str field.
* re.c (REG_BUSY): removed.
(rb_reg_initialize): prohibit re-initialize regexp.
(rb_reg_search): use usecnt to prevent freeing regexp currently
using. this prevents SEGV by:
r = /\A((a.)*(a.)*)*b/
r =~ "ab" + "\xc2\xa1".force_encoding("euc-jp")
t = Thread.new { r =~ "ab"*8 + "\xc2\xa1".force_encoding("utf-8")}
sleep 0.2
r =~ "ab"*8 + "\xc2\xa1".force_encoding("euc-jp")
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@17635 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ChangeLog')
| -rw-r--r-- | ChangeLog | 18 |
1 files changed, 18 insertions, 0 deletions
@@ -1,3 +1,21 @@ +Sat Jun 28 21:25:08 2008 Tanaka Akira <akr@fsij.org> + + * include/ruby/ruby.h (struct RRegexp): new field usecnt. replace + str and len by src. + + * gc.c (gc_mark_children): mark src field of regexp. + (obj_free): don't free str field. + + * re.c (REG_BUSY): removed. + (rb_reg_initialize): prohibit re-initialize regexp. + (rb_reg_search): use usecnt to prevent freeing regexp currently + using. this prevents SEGV by: + r = /\A((a.)*(a.)*)*b/ + r =~ "ab" + "\xc2\xa1".force_encoding("euc-jp") + t = Thread.new { r =~ "ab"*8 + "\xc2\xa1".force_encoding("utf-8")} + sleep 0.2 + r =~ "ab"*8 + "\xc2\xa1".force_encoding("euc-jp") + Sat Jun 28 21:15:43 2008 Nobuyoshi Nakada <nobu@ruby-lang.org> * include/ruby/intern.h (rb_str_new2, rb_tainted_str_new2, |
