mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-13 06:33:44 +01:00
Make the TROVE-2018-005 fix work with rust.
This commit is contained in:
parent
6e8e005b53
commit
a5d4ce2b39
@ -13,7 +13,22 @@
|
|||||||
#ifdef HAVE_RUST
|
#ifdef HAVE_RUST
|
||||||
|
|
||||||
/* Define for compatibility, used in main.c */
|
/* 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) */
|
#endif /* defined(HAVE_RUST) */
|
||||||
|
|
||||||
|
@ -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
|
/// Provide an interface for C to translate arguments and return types for
|
||||||
/// protover::list_supports_protocol_or_later
|
/// protover::list_supports_protocol_or_later
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
|
@ -317,6 +317,7 @@ test_protover_all_supported(void *arg)
|
|||||||
tor_end_capture_bugs_();
|
tor_end_capture_bugs_();
|
||||||
|
|
||||||
/* Protocol name too long */
|
/* Protocol name too long */
|
||||||
|
#ifndef HAVE_RUST // XXXXXX ?????
|
||||||
tor_capture_bugs_(1);
|
tor_capture_bugs_(1);
|
||||||
tt_assert(protover_all_supported(
|
tt_assert(protover_all_supported(
|
||||||
"DoSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
"DoSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||||
@ -324,6 +325,7 @@ test_protover_all_supported(void *arg)
|
|||||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||||
"aaaaaaaaaaaa=1-65536", &msg));
|
"aaaaaaaaaaaa=1-65536", &msg));
|
||||||
tor_end_capture_bugs_();
|
tor_end_capture_bugs_();
|
||||||
|
#endif
|
||||||
|
|
||||||
done:
|
done:
|
||||||
tor_end_capture_bugs_();
|
tor_end_capture_bugs_();
|
||||||
|
Loading…
Reference in New Issue
Block a user