diff --git a/Cargo.lock b/Cargo.lock index 26666032..402ee9c9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5896,7 +5896,6 @@ dependencies = [ "oslog", "paranoid-android", "parking_lot 0.11.2", - "parking_lot 0.12.1", "rand 0.7.3", "range-set-blaze", "rust-fsm", diff --git a/Earthfile b/Earthfile index 1710abbd..c4571228 100644 --- a/Earthfile +++ b/Earthfile @@ -115,10 +115,12 @@ build-linux-arm64: # Unit tests unit-tests-linux-amd64: FROM +code-linux + ENV RUST_BACKTRACE=1 RUN cargo test --target x86_64-unknown-linux-gnu --release -p veilid-server -p veilid-cli -p veilid-tools -p veilid-core # unit-tests-linux-arm64: # FROM +code-linux +# ENV RUST_BACKTRACE=1 # RUN cargo test --target aarch64-unknown-linux-gnu --release -p veilid-server -p veilid-cli -p veilid-tools -p veilid-core # Package diff --git a/veilid-flutter/lib/veilid_ffi.dart b/veilid-flutter/lib/veilid_ffi.dart index cfadb6a4..545641cc 100644 --- a/veilid-flutter/lib/veilid_ffi.dart +++ b/veilid-flutter/lib/veilid_ffi.dart @@ -338,8 +338,9 @@ Future processFuturePlain(Future future) { switch (list[0] as int) { case messageOk: { - if (list[1] == null) { - throw VeilidAPIExceptionInternal("Null MESSAGE_OK value"); + if (list[1] == null && null is! T) { + throw const VeilidAPIExceptionInternal( + "Null MESSAGE_OK value on non-nullable type"); } return list[1] as T; } @@ -377,10 +378,15 @@ Future processFutureJson( } case messageOkJson: { - if (list[1] == null) { - throw VeilidAPIExceptionInternal("Null MESSAGE_OK_JSON value"); + if (list[1] is! String) { + throw const VeilidAPIExceptionInternal( + "Non-string MESSAGE_OK_JSON value"); } var ret = jsonDecode(list[1] as String); + if (ret == null) { + throw const VeilidAPIExceptionInternal( + "Null JSON object on non nullable type"); + } return jsonConstructor(ret); } case messageErrJson: @@ -416,7 +422,14 @@ Future processFutureOptJson( if (list[1] == null) { return null; } + if (list[1] is! String) { + throw const VeilidAPIExceptionInternal( + "Non-string MESSAGE_OK_JSON optional value"); + } var ret = jsonDecode(list[1] as String); + if (ret == null) { + return null; + } return jsonConstructor(ret); } case messageErrJson: diff --git a/veilid-tools/src/assembly_buffer.rs b/veilid-tools/src/assembly_buffer.rs index d2bdf077..44ed3d58 100644 --- a/veilid-tools/src/assembly_buffer.rs +++ b/veilid-tools/src/assembly_buffer.rs @@ -12,7 +12,7 @@ const MAX_LEN: usize = LengthType::MAX as usize; // XXX: keep statistics on all drops and why we dropped them // XXX: move to config eventually? -const FRAGMENT_LEN: usize = 1280 - HEADER_LEN; +pub const FRAGMENT_LEN: usize = 1280 - HEADER_LEN; const MAX_CONCURRENT_HOSTS: usize = 256; const MAX_ASSEMBLIES_PER_HOST: usize = 256; const MAX_BUFFER_PER_HOST: usize = 256 * 1024; diff --git a/veilid-tools/src/tests/native/test_assembly_buffer.rs b/veilid-tools/src/tests/native/test_assembly_buffer.rs index 73268516..95620ad8 100644 --- a/veilid-tools/src/tests/native/test_assembly_buffer.rs +++ b/veilid-tools/src/tests/native/test_assembly_buffer.rs @@ -86,7 +86,7 @@ pub async fn test_one_frag_out_in() { // Sending println!("sending"); for _ in 0..10000 { - let random_len = (get_random_u32() % 1000) as usize + 1280; + let random_len = (get_random_u32() % 1000) as usize + FRAGMENT_LEN; let mut message = vec![1u8; random_len]; random_bytes(&mut message); let remote_addr = random_sockaddr(); @@ -289,7 +289,7 @@ pub async fn test_many_frags_with_drops() { println!("sending"); for _ in 0..1000 { let random_len = (get_random_u32() % 65536) as usize; - if random_len > 1280 { + if random_len > FRAGMENT_LEN { total_fragged += 1; } total_sent_size += random_len;