From fefeb7132968d6e3cdd76d1ea3faf1dc1dcd3ec7 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sat, 19 Nov 2011 05:41:17 +0000 Subject: raise ArgumentError if null bytes exist in file path We don't want path names silently truncated when passed to the C API. --- ext/tdb/tdb.c | 2 +- test/test_tdb.rb | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/ext/tdb/tdb.c b/ext/tdb/tdb.c index a4a5ec5..0a0adf2 100644 --- a/ext/tdb/tdb.c +++ b/ext/tdb/tdb.c @@ -262,7 +262,7 @@ static VALUE init(int argc, VALUE *argv, VALUE self) if (NIL_P(path)) o.tdb_flags |= TDB_INTERNAL; else - o.name = StringValuePtr(path); + o.name = StringValueCStr(path); tdb = (struct tdb_context *)my_tbr(nogvl_open, &o); if (!tdb) { diff --git a/test/test_tdb.rb b/test/test_tdb.rb index 7ae581d..9b2ed71 100644 --- a/test/test_tdb.rb +++ b/test/test_tdb.rb @@ -16,6 +16,10 @@ class TestTdb < Test::Unit::TestCase @tdb.close if @tdb && ! @tdb.closed? end + def test_create_file_null_byte_in_path + assert_raises(ArgumentError) { TDB.new("hello.tdb\0") } + end + def test_create_file assert_nothing_raised do @tmp = Tempfile.new('tdb') -- cgit v1.2.3-24-ge0c7