Use explicit sizes for pointers to arrays in FFI

This commit is contained in:
Jack Grigg 2019-12-05 11:09:55 +00:00
parent fb8c73c950
commit 8ad33e50a6
No known key found for this signature in database
GPG Key ID: 9E8255172BBF9898

View File

@ -1228,8 +1228,8 @@ pub extern "system" fn librustzcash_mmr_append(
p_len: size_t,
// New node pointer
nn_ptr: *const [u8; zcash_mmr::MAX_NODE_DATA_SIZE],
// Return of root commitment (32 byte hash)
rt_ret: *mut u8,
// Return of root commitment
rt_ret: *mut [u8; 32],
// Return buffer for appended leaves, should be pre-allocated of log2(t_len)+1 length
buf_ret: *mut [c_uchar; zcash_mmr::MAX_NODE_DATA_SIZE],
) -> u32 {
@ -1269,7 +1269,7 @@ pub extern "system" fn librustzcash_mmr_append(
.root_node()
.expect("Just added, should resolve always; qed");
unsafe {
slice::from_raw_parts_mut(rt_ret, 32).copy_from_slice(&root_node.data().subtree_commitment);
(*rt_ret).copy_from_slice(&root_node.data().subtree_commitment);
for (idx, next_buf) in slice::from_raw_parts_mut(buf_ret, return_count as usize)
.iter_mut()
@ -1300,8 +1300,8 @@ pub extern "system" fn librustzcash_mmr_delete(
p_len: size_t,
// Extra nodes loaded (for deletion) count
e_len: size_t,
// Return of root commitment (32 byte hash)
rt_ret: *mut u8,
// Return of root commitment
rt_ret: *mut [u8; 32],
) -> u32 {
let mut tree = match construct_mmr_tree(cbranch, t_len, ni_ptr, n_ptr, p_len, e_len) {
Ok(t) => t,
@ -1318,7 +1318,7 @@ pub extern "system" fn librustzcash_mmr_delete(
};
unsafe {
slice::from_raw_parts_mut(rt_ret, 32).copy_from_slice(
(*rt_ret).copy_from_slice(
&tree
.root_node()
.expect("Just generated without errors, root should be resolving")
@ -1334,7 +1334,7 @@ pub extern "system" fn librustzcash_mmr_delete(
pub extern "system" fn librustzcash_mmr_hash_node(
cbranch: u32,
n_ptr: *const [u8; zcash_mmr::MAX_NODE_DATA_SIZE],
h_ret: *mut u8,
h_ret: *mut [u8; 32],
) -> u32 {
let node_bytes: &[u8; zcash_mmr::MAX_NODE_DATA_SIZE] = unsafe {
match n_ptr.as_ref() {
@ -1349,7 +1349,7 @@ pub extern "system" fn librustzcash_mmr_hash_node(
};
unsafe {
slice::from_raw_parts_mut(h_ret, 32).copy_from_slice(&node.hash()[..]);
(*h_ret).copy_from_slice(&node.hash()[..]);
}
return 0;