]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
rust/protover: return C-allocated string in protover_all_supported()
authorcypherpunks <cypherpunks@torproject.org>
Fri, 21 Sep 2018 05:16:22 +0000 (05:16 +0000)
committercypherpunks <cypherpunks@torproject.org>
Fri, 21 Sep 2018 05:16:22 +0000 (05:16 +0000)
The result of CString::into_raw() is not safe to free
with free() except under finicky and fragile circumstances
that we definitely don't meet right now.

This was missed in be583a34a3815c2c10e86094ab0610e4b7f9c869.

changes/bug27740 [new file with mode: 0644]
src/rust/protover/ffi.rs

diff --git a/changes/bug27740 b/changes/bug27740
new file mode 100644 (file)
index 0000000..76a17b7
--- /dev/null
@@ -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.
index ca9a504fe1594ec2fcc32d2f0817f70bf63f5e1d..8ab11842d1d68aa20bc5c1729b8e3ca31b417fb5 100644 (file)
@@ -71,12 +71,7 @@ pub extern "C" fn protover_all_supported(
         if missing_out.is_null() {
             return 0;
         }
-        let c_unsupported: CString = match CString::new(unsupported.to_string()) {
-            Ok(n) => n,
-            Err(_) => return 1,
-        };
-
-        let ptr = c_unsupported.into_raw();
+        let ptr = allocate_and_copy_string(&unsupported.to_string());
         unsafe { *missing_out = ptr };
 
         return 0;