Skip to content

Commit 09abdf4

Browse files
authored
fix: Fix ZArr drop (#212)
1 parent 560a1d7 commit 09abdf4

File tree

2 files changed

+15
-2
lines changed

2 files changed

+15
-2
lines changed

phper/src/arrays.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use phper_alloc::ToRefOwned;
1616
use std::{
1717
fmt::{self, Debug},
1818
marker::PhantomData,
19-
mem::ManuallyDrop,
19+
mem::{ManuallyDrop, MaybeUninit},
2020
ops::Deref,
2121
ptr::null_mut,
2222
};
@@ -335,8 +335,10 @@ impl ZArr {
335335

336336
impl Drop for ZArr {
337337
fn drop(&mut self) {
338+
let mut val = MaybeUninit::<zval>::uninit();
338339
unsafe {
339-
zend_array_destroy(self.as_mut_ptr());
340+
phper_zval_arr(val.as_mut_ptr().cast(), self.as_mut_ptr());
341+
phper_zval_ptr_dtor(val.as_mut_ptr());
340342
}
341343
}
342344
}

tests/integration/src/arrays.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
// See the Mulan PSL v2 for more details.
1010

1111
use phper::{
12+
alloc::ToRefOwned,
1213
arrays::{InsertKey, IterKey, ZArray},
1314
modules::Module,
1415
objects::{ZObj, ZObject},
@@ -30,6 +31,16 @@ pub fn integrate(module: &mut Module) {
3031
let bar = a2.get("bar").unwrap();
3132
let bar = bar.as_z_str().unwrap().to_str().unwrap();
3233

34+
{
35+
let mut arr1 = ZArray::with_capacity(4);
36+
let mut arr2 = arr1.to_ref_owned();
37+
arr2.insert((), "1");
38+
arr2.insert((), "2");
39+
arr2.insert((), "3");
40+
arr2.insert((), "4");
41+
arr2.insert((), "5");
42+
}
43+
3344
Ok(format!("{} {}", val, bar))
3445
},
3546
);

0 commit comments

Comments
 (0)