From e892862c6c0c2d5d1ebeb902826a4011bcac6a16 Mon Sep 17 00:00:00 2001 From: Amaan Qureshi Date: Sat, 2 Nov 2024 00:46:45 -0400 Subject: [PATCH] fix(rust): fix progress callback scope to prevent premature drop --- lib/binding_rust/lib.rs | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/lib/binding_rust/lib.rs b/lib/binding_rust/lib.rs index 462bddb6..ead829b0 100644 --- a/lib/binding_rust/lib.rs +++ b/lib/binding_rust/lib.rs @@ -803,10 +803,12 @@ impl Parser { progress_callback: None, }; + let mut callback_ptr; let parse_options = if let Some(options) = options { - if let Some(mut cb) = options.progress_callback { + if let Some(cb) = options.progress_callback { + callback_ptr = cb; ffi::TSParseOptions { - payload: core::ptr::addr_of_mut!(cb).cast::(), + payload: core::ptr::addr_of_mut!(callback_ptr).cast::(), progress_callback: Some(progress), } } else { @@ -939,10 +941,12 @@ impl Parser { progress_callback: None, }; + let mut callback_ptr; let parse_options = if let Some(options) = options { - if let Some(mut cb) = options.progress_callback { + if let Some(cb) = options.progress_callback { + callback_ptr = cb; ffi::TSParseOptions { - payload: core::ptr::addr_of_mut!(cb).cast::(), + payload: core::ptr::addr_of_mut!(callback_ptr).cast::(), progress_callback: Some(progress), } } else { @@ -1054,10 +1058,12 @@ impl Parser { progress_callback: None, }; + let mut callback_ptr; let parse_options = if let Some(options) = options { - if let Some(mut cb) = options.progress_callback { + if let Some(cb) = options.progress_callback { + callback_ptr = cb; ffi::TSParseOptions { - payload: core::ptr::addr_of_mut!(cb).cast::(), + payload: core::ptr::addr_of_mut!(callback_ptr).cast::(), progress_callback: Some(progress), } } else { @@ -1159,10 +1165,12 @@ impl Parser { progress_callback: None, }; + let mut callback_ptr; let parse_options = if let Some(options) = options { - if let Some(mut cb) = options.progress_callback { + if let Some(cb) = options.progress_callback { + callback_ptr = cb; ffi::TSParseOptions { - payload: core::ptr::addr_of_mut!(cb).cast::(), + payload: core::ptr::addr_of_mut!(callback_ptr).cast::(), progress_callback: Some(progress), } } else {