Skip to content

Commit

Permalink
metadata: try to upgrade Weak before returning a pointer
Browse files Browse the repository at this point in the history
Weak::as_ptr() can return an invalid pointer. It can be even dangling (non-null).

It's safer to try to upgrade to an Arc. If upgrade was successful,
make use of RefFFI API to return a valid pointer. Otherwise, return
non-dangling null pointer.
  • Loading branch information
muzarski committed Dec 2, 2024
1 parent fbefc08 commit b042db7
Showing 1 changed file with 5 additions and 1 deletion.
6 changes: 5 additions & 1 deletion scylla-rust-wrapper/src/metadata.rs
Original file line number Diff line number Diff line change
Expand Up @@ -433,7 +433,11 @@ pub unsafe extern "C" fn cass_materialized_view_meta_base_table(
view_meta: *const CassMaterializedViewMeta,
) -> *const CassTableMeta {
let view_meta = RefFFI::as_ref(view_meta);
view_meta.base_table.as_ptr()

match view_meta.base_table.upgrade() {
Some(arc) => RefFFI::as_ptr(&arc),
None => std::ptr::null(),
}
}

#[no_mangle]
Expand Down

0 comments on commit b042db7

Please sign in to comment.