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