summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--dir.c7
2 files changed, 10 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 339c60c5bb..2d5aa69a6d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Fri Apr 9 20:05:05 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * dir.c (push_glob): add RB_GC_GUARD to prevent str being free'ed.
+ a patch from Masaya TARUI in [ruby-dev:40939]. [ruby-dev:40514]
+
Fri Apr 9 10:53:00 2010 Kenta Murata <mrkn@mrkn.jp>
* compile.c (iseq_compile_each): stop hiding, and freeze unpopped
diff --git a/dir.c b/dir.c
index a2e8e037c5..6cdccd8b85 100644
--- a/dir.c
+++ b/dir.c
@@ -1622,14 +1622,17 @@ push_glob(VALUE ary, VALUE str, int flags)
{
struct glob_args args;
rb_encoding *enc = rb_enc_get(str);
+ int ret;
if (enc == rb_usascii_encoding()) enc = rb_filesystem_encoding();
args.func = push_pattern;
args.value = ary;
args.enc = enc;
- return ruby_brace_glob0(RSTRING_PTR(str), flags | GLOB_VERBOSE,
- rb_glob_caller, (VALUE)&args, enc);
+ ret = ruby_brace_glob0(RSTRING_PTR(str), flags | GLOB_VERBOSE,
+ rb_glob_caller, (VALUE)&args, enc);
+ RB_GC_GUARD(str);
+ return ret;
}
static VALUE