diff options
author | Nick Mathewson <nickm@torproject.org> | 2018-05-22 13:35:20 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2018-05-22 13:35:20 -0400 |
commit | a5d4ce2b393955f60962d3db8744a846506c3e7b (patch) | |
tree | fa1b4af7d4be4a160c63337fdc41ee3b23c59f6e /src/rust/protover/ffi.rs | |
parent | 6e8e005b531c9061866bb4f601e4b97814834687 (diff) | |
download | tor-a5d4ce2b393955f60962d3db8744a846506c3e7b.tar.gz tor-a5d4ce2b393955f60962d3db8744a846506c3e7b.zip |
Make the TROVE-2018-005 fix work with rust.
Diffstat (limited to 'src/rust/protover/ffi.rs')
-rw-r--r-- | src/rust/protover/ffi.rs | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/rust/protover/ffi.rs b/src/rust/protover/ffi.rs index ed078654f7..9656e8c318 100644 --- a/src/rust/protover/ffi.rs +++ b/src/rust/protover/ffi.rs @@ -116,6 +116,32 @@ pub extern "C" fn protocol_list_supports_protocol( } } +#[no_mangle] +pub extern "C" fn protover_contains_long_protocol_names_( + c_protocol_list: *const c_char +) -> c_int { + if c_protocol_list.is_null() { + return 1; + } + + // Require an unsafe block to read the version from a C string. The pointer + // is checked above to ensure it is not null. + let c_str: &CStr = unsafe { CStr::from_ptr(c_protocol_list) }; + + let protocol_list = match c_str.to_str() { + Ok(n) => n, + Err(_) => return 1 + }; + + let protocol_entry : Result<UnvalidatedProtoEntry,_> = + protocol_list.parse(); + + match protocol_entry { + Ok(_) => 0, + Err(_) => 1, + } +} + /// Provide an interface for C to translate arguments and return types for /// protover::list_supports_protocol_or_later #[no_mangle] |