diff options
author | Eric Wong <normalperson@yhbt.net> | 2011-02-27 01:10:33 +0000 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2011-02-27 01:21:17 +0000 |
commit | 9c14d0c61ae5c9ed16604d03d70dc3c4765563d0 (patch) | |
tree | d3b6cf7b4cfb9342f39d1baca4880a106ced9be0 | |
parent | c661c9be8b6ea636d0504136a06f8d98a6af3195 (diff) | |
download | mahoro-9c14d0c61ae5c9ed16604d03d70dc3c4765563d0.tar.gz |
disallow '\0' in C strings
It's a bug in user code if we try to open files with '\0' in it.
-rw-r--r-- | mahoro.c | 4 | ||||
-rwxr-xr-x | test.rb | 4 |
2 files changed, 6 insertions, 2 deletions
@@ -46,7 +46,7 @@ mahoro_initialize(argc, argv, self) switch(rb_scan_args(argc, argv, "02", &vflags, &vpath)) { case 2: if(!NIL_P(vpath)) { - path = StringValuePtr(vpath); + path = StringValueCStr(vpath); } /* fallthrough */ case 1: @@ -77,7 +77,7 @@ mahoro_file(self, path) const char *msg; magic_t cookie = ((struct MagicCookie *) DATA_PTR(self))->cookie; - if(!(msg = magic_file(cookie, StringValuePtr(path)))) { + if(!(msg = magic_file(cookie, StringValueCStr(path)))) { rb_raise(eMahoroError, "failed lookup: %s", magic_error(cookie)); } @@ -22,6 +22,10 @@ class MahoroTestCase < Test::Unit::TestCase }.include?(@m.file('mahoro.c'))) end + def test_null_byte_in_path + assert_raises(ArgumentError) { @m.file("mahoro.c\0foo") } + end + def test_buffer @m.flags = Mahoro::NONE assert_equal('ASCII C program text', |