summaryrefslogtreecommitdiff
path: root/dir.c
diff options
context:
space:
mode:
authormame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-04-09 11:08:06 +0000
committermame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-04-09 11:08:06 +0000
commit5dd8daaa27e409ef1c63e70a59dcafb4a8f9775b (patch)
treebd8e484e361d8a74df24492b498f00642a795fb9 /dir.c
parente9cfe4770059f4ab64f84366949742274c4fe4de (diff)
* 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] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27268 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'dir.c')
-rw-r--r--dir.c7
1 files changed, 5 insertions, 2 deletions
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