mirror of
https://github.com/signalapp/libsignal.git
synced 2026-04-25 17:25:18 +02:00
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:
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user