about summary refs log tree commit
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2011-06-03 17:50:33 +0000
committerEric Wong <normalperson@yhbt.net>2011-06-03 17:50:33 +0000
commitcbead61ab6ff9094aed0b5ee2a1628b8e9af09d8 (patch)
tree92c5902474d12b28dd59f5a5a4ee15ba841dfa2f
parent12e06682825246f690fc547fd2412ca6c7c4a7bd (diff)
downloadrpatricia-cbead61ab6ff9094aed0b5ee2a1628b8e9af09d8.tar.gz
use StringValueCStr for string conversions
Ruby strings may contain embedded null bytes that
could create false positives.  Also, in Ruby 1.9, Ruby
strings may not be null-terminated internally, StringValueCStr
ensures null-termination upon export.
-rw-r--r--ext/rpatricia/rpatricia.c2
-rw-r--r--test/test_invalid_inputs.rb4
2 files changed, 5 insertions, 1 deletions
diff --git a/ext/rpatricia/rpatricia.c b/ext/rpatricia/rpatricia.c
index 066f82e..81e0990 100644
--- a/ext/rpatricia/rpatricia.c
+++ b/ext/rpatricia/rpatricia.c
@@ -46,7 +46,7 @@ wrap_node(patricia_node_t *orig)
 static void
 my_ascii2prefix(patricia_tree_t *tree, VALUE str, prefix_t *prefix)
 {
-  char *cstr = StringValuePtr(str);
+  char *cstr = StringValueCStr(str);
   prefix_t *ok = ascii2prefix(cstr, prefix);
 
   if (!ok)
diff --git a/test/test_invalid_inputs.rb b/test/test_invalid_inputs.rb
index 93e7a96..32b7003 100644
--- a/test/test_invalid_inputs.rb
+++ b/test/test_invalid_inputs.rb
@@ -7,6 +7,10 @@ class TestInvalidInput < Test::Unit::TestCase
     @t = Patricia.new
   end
 
+  def test_embedded_null
+    assert_raises(ArgumentError) { @t.add("100.0.0.0/8\0") }
+  end
+
   def test_invalid_add
     assert_raises(ArgumentError) { @t.add('1000.0.0.0/8') }
     assert_raises(ArgumentError) { @t.add("\0") }