summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-10-12 09:18:07 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-10-12 09:18:07 +0000
commit7085db45e4f15a58f9a82c8815bcc31364e0fde1 (patch)
tree1a97fd82d4c00c6fa70951ab6ee387422228fb23
parent84fa14aab12ef679ead8af2da2574db9b9a05c84 (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--ChangeLog4
-rw-r--r--file.c3
-rw-r--r--test/ruby/test_file.rb10
3 files changed, 17 insertions, 0 deletions
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 <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.
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