diff --git a/phper/src/arrays.rs b/phper/src/arrays.rs index 437d3bd..0d19787 100644 --- a/phper/src/arrays.rs +++ b/phper/src/arrays.rs @@ -16,7 +16,7 @@ use phper_alloc::ToRefOwned; use std::{ fmt::{self, Debug}, marker::PhantomData, - mem::ManuallyDrop, + mem::{ManuallyDrop, MaybeUninit}, ops::Deref, ptr::null_mut, }; @@ -335,8 +335,10 @@ impl ZArr { impl Drop for ZArr { fn drop(&mut self) { + let mut val = MaybeUninit::::uninit(); unsafe { - zend_array_destroy(self.as_mut_ptr()); + phper_zval_arr(val.as_mut_ptr().cast(), self.as_mut_ptr()); + phper_zval_ptr_dtor(val.as_mut_ptr()); } } } diff --git a/tests/integration/src/arrays.rs b/tests/integration/src/arrays.rs index 582aff3..a80de34 100644 --- a/tests/integration/src/arrays.rs +++ b/tests/integration/src/arrays.rs @@ -9,6 +9,7 @@ // See the Mulan PSL v2 for more details. use phper::{ + alloc::ToRefOwned, arrays::{InsertKey, IterKey, ZArray}, modules::Module, objects::{ZObj, ZObject}, @@ -30,6 +31,16 @@ pub fn integrate(module: &mut Module) { let bar = a2.get("bar").unwrap(); let bar = bar.as_z_str().unwrap().to_str().unwrap(); + { + let mut arr1 = ZArray::with_capacity(4); + let mut arr2 = arr1.to_ref_owned(); + arr2.insert((), "1"); + arr2.insert((), "2"); + arr2.insert((), "3"); + arr2.insert((), "4"); + arr2.insert((), "5"); + } + Ok(format!("{} {}", val, bar)) }, );