Commit cde5c9d0 authored by Nick Mathewson's avatar Nick Mathewson 🦀
Browse files

Merge branch 'maint-0.3.3'

parents b858f576 a5d4ce2b
Loading
Loading
Loading
Loading
+16 −1
Original line number Diff line number Diff line
@@ -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) */
+26 −0
Original line number Diff line number Diff line
@@ -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]
+2 −0
Original line number Diff line number Diff line
@@ -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_();