summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2018-10-23 19:18:23 -0400
committerNick Mathewson <nickm@torproject.org>2018-10-23 19:18:23 -0400
commit271144c99e00d0596d3a8f7e2c278f2b2789c115 (patch)
treebf11bed6b710931fa75c61dc8024411a385b5246
parent64f36373735c6feee44647cf990d663960156511 (diff)
parent7edc594ee732960733d34309980d0e7190e35fb2 (diff)
downloadtor-271144c99e00d0596d3a8f7e2c278f2b2789c115.tar.gz
tor-271144c99e00d0596d3a8f7e2c278f2b2789c115.zip
Merge branch 'maint-0.3.4' into release-0.3.4
-rw-r--r--changes/bug277404
-rw-r--r--changes/bug278043
-rw-r--r--src/rust/protover/ffi.rs10
-rw-r--r--src/test/test_protover.c1
4 files changed, 12 insertions, 6 deletions
diff --git a/changes/bug27740 b/changes/bug27740
new file mode 100644
index 0000000000..76a17b7dda
--- /dev/null
+++ b/changes/bug27740
@@ -0,0 +1,4 @@
+ o Minor bugfixes (rust):
+ - Return a string that can be safely freed by C code, not one created by
+ the rust allocator, in protover_all_supported(). Fixes bug 27740; bugfix
+ on 0.3.3.1-alpha.
diff --git a/changes/bug27804 b/changes/bug27804
new file mode 100644
index 0000000000..fa7fec0bc5
--- /dev/null
+++ b/changes/bug27804
@@ -0,0 +1,3 @@
+ o Minor bugfixes (rust):
+ - Fix a potential null dereference in protover_all_supported().
+ Add a test for it. Fixes bug 27804; bugfix on 0.3.3.1-alpha.
diff --git a/src/rust/protover/ffi.rs b/src/rust/protover/ffi.rs
index e3e545db75..f55b87acf6 100644
--- a/src/rust/protover/ffi.rs
+++ b/src/rust/protover/ffi.rs
@@ -65,12 +65,10 @@ pub extern "C" fn protover_all_supported(
if maybe_unsupported.is_some() {
let unsupported: UnvalidatedProtoEntry = maybe_unsupported.unwrap();
- let c_unsupported: CString = match CString::new(unsupported.to_string()) {
- Ok(n) => n,
- Err(_) => return 1,
- };
-
- let ptr = c_unsupported.into_raw();
+ if missing_out.is_null() {
+ return 0;
+ }
+ let ptr = allocate_and_copy_string(&unsupported.to_string());
unsafe { *missing_out = ptr };
return 0;
diff --git a/src/test/test_protover.c b/src/test/test_protover.c
index 2476693005..06fd575631 100644
--- a/src/test/test_protover.c
+++ b/src/test/test_protover.c
@@ -259,6 +259,7 @@ test_protover_all_supported(void *arg)
tt_ptr_op(msg, OP_EQ, NULL);
// Some things we don't support
+ tt_assert(! protover_all_supported("Wombat=9", NULL));
tt_assert(! protover_all_supported("Wombat=9", &msg));
tt_str_op(msg, OP_EQ, "Wombat=9");
tor_free(msg);