@@ -113,18 +113,20 @@ mod utxo_tests {
113113 let mut utxos_out: * mut FFIUTXO = ptr:: null_mut ( ) ;
114114 let mut count_out: usize = 0 ;
115115
116- // Create an empty managed wallet info
116+ // Create an empty managed wallet info (heap-allocated like C would do)
117117 let managed_info = ManagedWalletInfo :: new ( Network :: Testnet , [ 0u8 ; 32 ] ) ;
118- let ffi_managed_info = FFIManagedWalletInfo :: new ( managed_info) ;
118+ let ffi_managed_info = Box :: into_raw ( Box :: new ( FFIManagedWalletInfo :: new ( managed_info) ) ) ;
119119
120120 let result = unsafe {
121- managed_wallet_get_utxos ( & ffi_managed_info, & mut utxos_out, & mut count_out, error)
121+ managed_wallet_get_utxos ( & * ffi_managed_info, & mut utxos_out, & mut count_out, error)
122122 } ;
123123
124124 assert ! ( result) ;
125125 assert_eq ! ( unsafe { ( * error) . code } , FFIErrorCode :: Success ) ;
126126 assert_eq ! ( count_out, 0 ) ;
127127 assert ! ( utxos_out. is_null( ) ) ;
128+
129+ unsafe { crate :: managed_wallet:: managed_wallet_free ( ffi_managed_info) } ;
128130 }
129131
130132 // Note: There's no individual utxo_free function, only utxo_array_free
@@ -229,10 +231,10 @@ mod utxo_tests {
229231
230232 managed_info. accounts . insert ( bip44_account) ;
231233
232- let ffi_managed_info = FFIManagedWalletInfo :: new ( managed_info) ;
234+ let ffi_managed_info = Box :: into_raw ( Box :: new ( FFIManagedWalletInfo :: new ( managed_info) ) ) ;
233235
234236 let result = unsafe {
235- managed_wallet_get_utxos ( & ffi_managed_info, & mut utxos_out, & mut count_out, error)
237+ managed_wallet_get_utxos ( & * ffi_managed_info, & mut utxos_out, & mut count_out, error)
236238 } ;
237239
238240 assert ! ( result) ;
@@ -267,6 +269,7 @@ mod utxo_tests {
267269 // Clean up
268270 unsafe {
269271 utxo_array_free ( utxos_out, count_out) ;
272+ crate :: managed_wallet:: managed_wallet_free ( ffi_managed_info) ;
270273 }
271274 }
272275
@@ -393,10 +396,10 @@ mod utxo_tests {
393396 }
394397 managed_info. accounts . insert ( coinjoin_account) ;
395398
396- let ffi_managed_info = FFIManagedWalletInfo :: new ( managed_info) ;
399+ let ffi_managed_info = Box :: into_raw ( Box :: new ( FFIManagedWalletInfo :: new ( managed_info) ) ) ;
397400
398401 let result = unsafe {
399- managed_wallet_get_utxos ( & ffi_managed_info, & mut utxos_out, & mut count_out, error)
402+ managed_wallet_get_utxos ( & * ffi_managed_info, & mut utxos_out, & mut count_out, error)
400403 } ;
401404
402405 assert ! ( result) ;
@@ -406,6 +409,7 @@ mod utxo_tests {
406409 // Clean up
407410 unsafe {
408411 utxo_array_free ( utxos_out, count_out) ;
412+ crate :: managed_wallet:: managed_wallet_free ( ffi_managed_info) ;
409413 }
410414 }
411415
@@ -464,16 +468,17 @@ mod utxo_tests {
464468 testnet_account. utxos . insert ( outpoint, utxo) ;
465469 managed_info. accounts . insert ( testnet_account) ;
466470
467- let ffi_managed_info = FFIManagedWalletInfo :: new ( managed_info) ;
471+ let ffi_managed_info = Box :: into_raw ( Box :: new ( FFIManagedWalletInfo :: new ( managed_info) ) ) ;
468472
469473 // Get UTXOs
470474 let result = unsafe {
471- managed_wallet_get_utxos ( & ffi_managed_info, & mut utxos_out, & mut count_out, error)
475+ managed_wallet_get_utxos ( & * ffi_managed_info, & mut utxos_out, & mut count_out, error)
472476 } ;
473477 assert ! ( result) ;
474478 assert_eq ! ( count_out, 1 ) ;
475479 unsafe {
476480 utxo_array_free ( utxos_out, count_out) ;
481+ crate :: managed_wallet:: managed_wallet_free ( ffi_managed_info) ;
477482 }
478483 }
479484
@@ -573,22 +578,24 @@ mod utxo_tests {
573578 let mut count_out: usize = 0 ;
574579
575580 let managed_info = ManagedWalletInfo :: new ( Network :: Testnet , [ 4u8 ; 32 ] ) ;
576- let ffi_managed_info = FFIManagedWalletInfo :: new ( managed_info) ;
581+ let ffi_managed_info = Box :: into_raw ( Box :: new ( FFIManagedWalletInfo :: new ( managed_info) ) ) ;
577582
578583 // Test with null utxos_out
579584 let result = unsafe {
580- managed_wallet_get_utxos ( & ffi_managed_info, ptr:: null_mut ( ) , & mut count_out, error)
585+ managed_wallet_get_utxos ( & * ffi_managed_info, ptr:: null_mut ( ) , & mut count_out, error)
581586 } ;
582587 assert ! ( !result) ;
583588 assert_eq ! ( unsafe { ( * error) . code } , FFIErrorCode :: InvalidInput ) ;
584589
585590 // Test with null count_out
586591 let mut utxos_out: * mut FFIUTXO = ptr:: null_mut ( ) ;
587592 let result = unsafe {
588- managed_wallet_get_utxos ( & ffi_managed_info, & mut utxos_out, ptr:: null_mut ( ) , error)
593+ managed_wallet_get_utxos ( & * ffi_managed_info, & mut utxos_out, ptr:: null_mut ( ) , error)
589594 } ;
590595 assert ! ( !result) ;
591596 assert_eq ! ( unsafe { ( * error) . code } , FFIErrorCode :: InvalidInput ) ;
597+
598+ unsafe { crate :: managed_wallet:: managed_wallet_free ( ffi_managed_info) } ;
592599 }
593600
594601 #[ test]
0 commit comments