diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-10-12 09:18:07 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-10-12 09:18:07 +0000 |
commit | 7085db45e4f15a58f9a82c8815bcc31364e0fde1 (patch) | |
tree | 1a97fd82d4c00c6fa70951ab6ee387422228fb23 | |
parent | 84fa14aab12ef679ead8af2da2574db9b9a05c84 (diff) |
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
-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 |