Sealed sender v2: add an InvalidRegistrationId exception/error

This dedicated error is thrown when a recipient has a registration ID
that's out of the range used by Signal [0, 0x3FFF]. These IDs cannot
be encoded in the sealed sender v2 format and are not supported, even
though they don't cause any problems for 1:1 messages.
This commit is contained in:
Jordan Rose
2021-08-31 12:35:40 -07:00
parent 1f477c860c
commit 8c5b6af3fa
20 changed files with 526 additions and 66 deletions

View File

@@ -12,6 +12,7 @@ use libsignal_bridge::ffi::*;
use libsignal_protocol::*;
use std::convert::TryFrom;
use std::ffi::{c_void, CString};
use std::panic::AssertUnwindSafe;
pub mod logging;
mod util;
@@ -58,6 +59,31 @@ pub unsafe extern "C" fn signal_error_get_message(
}
}
#[no_mangle]
pub unsafe extern "C" fn signal_error_get_address(
err: *const SignalFfiError,
out: *mut *mut ProtocolAddress,
) -> *mut SignalFfiError {
let err = AssertUnwindSafe(err);
run_ffi_safe(|| {
let err = err.as_ref().ok_or(SignalFfiError::NullPointer)?;
match err {
SignalFfiError::Signal(SignalProtocolError::InvalidRegistrationId(addr, _value)) => {
box_object(out, Ok(addr.clone()))?;
}
_ => {
return Err(SignalFfiError::Signal(
SignalProtocolError::InvalidArgument(format!(
"cannot get address from error ({})",
err
)),
));
}
}
Ok(())
})
}
#[no_mangle]
pub unsafe extern "C" fn signal_error_get_type(err: *const SignalFfiError) -> u32 {
match err.as_ref() {