Loading src/or/protover_rust.c +16 −1 Original line number Diff line number Diff line Loading @@ -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) */ src/rust/protover/ffi.rs +26 −0 Original line number Diff line number Diff line Loading @@ -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] Loading src/test/test_protover.c +2 −0 Original line number Diff line number Diff line Loading @@ -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" Loading @@ -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_(); Loading Loading
src/or/protover_rust.c +16 −1 Original line number Diff line number Diff line Loading @@ -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) */
src/rust/protover/ffi.rs +26 −0 Original line number Diff line number Diff line Loading @@ -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] Loading
src/test/test_protover.c +2 −0 Original line number Diff line number Diff line Loading @@ -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" Loading @@ -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_(); Loading