Skip to content

Commit 2d33344

Browse files
romanzacseemenkina
andauthored
test: Serialization FFI error cases (#376)
## Description A batch of tests to cover serialization and FFI error cases for witness/proof values. C FFI coverage extension for out-of-bounds, bad depth, and invalid inputs. ## Tests modified/added rln/tests/ffi.rs: - test_witness_serialization_truncated_extra_bytes_ffi - test_proof_values_serialization_truncated_bytes_ffi - test_rln_invalid_witness_input_ffi - test_rln_out_of_bounds_ffi rln/tests/protocol.rs: - test_witness_serialization - test_witness_serialization_be_roundtrip_and_length_check - test_proof_values_serialization_be_roundtrip ## Issues reported - #379 ## Coverage changed Before 88.05% [Download HTML Report](https://github.com/vacp2p/zerokit/actions/runs/21655661374/artifacts/5368022860) After 88.98% [Download HTML Report](https://github.com/vacp2p/zerokit/actions/runs/22424907925/artifacts/5665353950) ## Checklist - [x] I have run the CI coverage report. Add the `run-coverage` label to this PR to enable it. --------- Co-authored-by: Ekaterina Broslavskaya <seemenkina@gmail.com>
1 parent be0d246 commit 2d33344

File tree

9 files changed

+662
-25
lines changed

9 files changed

+662
-25
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
.idea
44
*.log
55
tmp/
6+
test-path/
67

78
# Generated by Cargo will have compiled files and executables
89
/target

rln/src/pm_tree_adapter.rs

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ use serde_json::Value;
66
use tempfile::Builder;
77
use zerokit_utils::{
88
error::{FromConfigError, ZerokitMerkleTreeError},
9-
merkle_tree::{ZerokitMerkleProof, ZerokitMerkleTree},
9+
merkle_tree::{
10+
validate_override_range_inputs, EmptyIndicesPolicy, ZerokitMerkleProof, ZerokitMerkleTree,
11+
},
1012
pm_tree::{
1113
pmtree,
1214
pmtree::{tree::Key, Database, Hasher, PmtreeErrorKind},
@@ -330,8 +332,15 @@ impl ZerokitMerkleTree for PmTree {
330332
indices: J,
331333
) -> Result<(), ZerokitMerkleTreeError> {
332334
let leaves = leaves.into_iter().collect::<Vec<_>>();
333-
let mut indices = indices.into_iter().collect::<Vec<_>>();
334-
indices.sort();
335+
let validated = validate_override_range_inputs(
336+
start,
337+
leaves.len(),
338+
indices.into_iter().collect::<Vec<_>>(),
339+
self.capacity(),
340+
// PMTree supports set-only overrides (`indices` can be empty).
341+
EmptyIndicesPolicy::Allow,
342+
)?;
343+
let indices = validated.indices;
335344

336345
match (leaves.len(), indices.len()) {
337346
(0, 0) => Err(ZerokitMerkleTreeError::InvalidLeaf),
@@ -342,7 +351,14 @@ impl ZerokitMerkleTree for PmTree {
342351
.remove_indices(&indices)
343352
.map_err(ZerokitMerkleTreeError::PmtreeErrorKind),
344353
(_, _) => self
345-
.remove_indices_and_set_leaves(start, leaves, &indices)
354+
.remove_indices_and_set_leaves(
355+
start,
356+
leaves,
357+
&indices,
358+
validated
359+
.max_index
360+
.ok_or(ZerokitMerkleTreeError::InvalidIndices)?,
361+
)
346362
.map_err(ZerokitMerkleTreeError::PmtreeErrorKind),
347363
}
348364
}
@@ -439,14 +455,19 @@ impl PmTree {
439455
start: usize,
440456
leaves: Vec<FrOfPmTreeHasher>,
441457
indices: &[usize],
458+
max_index: usize,
442459
) -> Result<(), PmtreeErrorKind> {
443460
if indices.is_empty() {
444461
return Err(PmtreeErrorKind::TreeError(
445462
pmtree::TreeErrorKind::InvalidKey,
446463
));
447464
}
448465
let min_index = indices[0];
449-
let max_index = start + leaves.len();
466+
if min_index >= max_index || min_index > start {
467+
return Err(PmtreeErrorKind::TreeError(
468+
pmtree::TreeErrorKind::IndexOutOfBounds,
469+
));
470+
}
450471

451472
let mut set_values = vec![PmTreeHasher::default_leaf(); max_index - min_index];
452473

0 commit comments

Comments
 (0)