From b042db7b9568931e97b53d7314f3823c4ea905d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Uzarski?= Date: Tue, 26 Nov 2024 16:14:32 +0100 Subject: [PATCH] metadata: try to upgrade Weak before returning a pointer 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. --- scylla-rust-wrapper/src/metadata.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/scylla-rust-wrapper/src/metadata.rs b/scylla-rust-wrapper/src/metadata.rs index d1a198a0..2965c74c 100644 --- a/scylla-rust-wrapper/src/metadata.rs +++ b/scylla-rust-wrapper/src/metadata.rs @@ -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]