tor

The Tor anonymity network
git clone https://git.dasho.dev/tor.git
Log | Files | Refs | README | LICENSE

commit cde5c9d0c335e51c254251f018e9de620c27d9db
parent b858f576c327f4fd0a2ead16dc6d6bf7b721829a
Author: Nick Mathewson <nickm@torproject.org>
Date:   Tue, 22 May 2018 13:35:33 -0400

Merge branch 'maint-0.3.3'

Diffstat:
Msrc/or/protover_rust.c | 17++++++++++++++++-
Msrc/rust/protover/ffi.rs | 26++++++++++++++++++++++++++
Msrc/test/test_protover.c | 2++
3 files changed, 44 insertions(+), 1 deletion(-)

diff --git a/src/or/protover_rust.c b/src/or/protover_rust.c @@ -13,7 +13,22 @@ #ifdef HAVE_RUST /* Define for compatibility, used in main.c */ -void protover_free_all(void) {} +void +protover_free_all(void) +{ +} + +int protover_contains_long_protocol_names_(const char *s); + +/** + * Return true if the unparsed protover in <b>s</b> would contain a protocol + * name longer than MAX_PROTOCOL_NAME_LENGTH, and false otherwise. + */ +bool +protover_contains_long_protocol_names(const char *s) +{ + return protover_contains_long_protocol_names_(s) != 0; +} #endif /* defined(HAVE_RUST) */ diff --git a/src/rust/protover/ffi.rs b/src/rust/protover/ffi.rs @@ -113,6 +113,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] diff --git a/src/test/test_protover.c b/src/test/test_protover.c @@ -317,6 +317,7 @@ test_protover_all_supported(void *arg) tor_end_capture_bugs_(); /* Protocol name too long */ +#ifndef HAVE_RUST // XXXXXX ????? tor_capture_bugs_(1); tt_assert(protover_all_supported( "DoSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" @@ -324,6 +325,7 @@ test_protover_all_supported(void *arg) "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" "aaaaaaaaaaaa=1-65536", &msg)); tor_end_capture_bugs_(); +#endif done: tor_end_capture_bugs_();