From 7085db45e4f15a58f9a82c8815bcc31364e0fde1 Mon Sep 17 00:00:00 2001 From: nobu Date: Fri, 12 Oct 2012 09:18:07 +0000 Subject: [PATCH] file.c: poisoned NUL * file.c (rb_get_path_check): path name must not contain NUL bytes. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37163 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 4 ++++ file.c | 3 +++ test/ruby/test_file.rb | 10 ++++++++++ 3 files changed, 17 insertions(+) diff --git a/ChangeLog b/ChangeLog index c71590bf27..31cac1cb53 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Fri Oct 12 18:18:03 2012 Nobuyoshi Nakada + + * file.c (rb_get_path_check): path name must not contain NUL bytes. + Fri Oct 12 16:06:20 2012 NAKAMURA Usaku * tool/merger.rb: now can merge revision(s) without --ticket again. diff --git a/file.c b/file.c index 6940142653..b27e769f57 100644 --- a/file.c +++ b/file.c @@ -184,6 +184,9 @@ rb_get_path_check(VALUE obj, int level) rb_raise(rb_eEncCompatError, "path name must be ASCII-compatible (%s): %s", rb_enc_name(enc), RSTRING_PTR(tmp)); } + + StringValueCStr(tmp); + return rb_str_new4(tmp); } diff --git a/test/ruby/test_file.rb b/test/ruby/test_file.rb index f54e440313..41483cee3a 100644 --- a/test/ruby/test_file.rb +++ b/test/ruby/test_file.rb @@ -349,4 +349,14 @@ class TestFile < Test::Unit::TestCase end end end + + def test_open_nul + Dir.mktmpdir(__method__.to_s) do |tmpdir| + path = File.join(tmpdir, "foo") + assert_raise(ArgumentError) do + open(path + "\0bar", "w") {} + end + assert_file_not(:exist?, path) + end + end end