diff options
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | file.c | 3 | ||||
-rw-r--r-- | test/ruby/test_file.rb | 10 |
3 files changed, 17 insertions, 0 deletions
@@ -1,3 +1,7 @@ +Fri Oct 12 18:18:03 2012 Nobuyoshi Nakada <nobu@ruby-lang.org> + + * file.c (rb_get_path_check): path name must not contain NUL bytes. + Fri Oct 12 16:06:20 2012 NAKAMURA Usaku <usa@ruby-lang.org> * tool/merger.rb: now can merge revision(s) without --ticket again. @@ -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 |