fix leaks
[m6w6/ext-psi] / src / types / let_func.c
index 468d215ae3cdf8559488e78a780fe5b32762ce6e..ea2f371907ef46c973fdafdad429c2417516e1d0 100644 (file)
@@ -139,6 +139,7 @@ static inline bool validate_let_func_inner(struct psi_data *data,
 
                                if (name) {
                                        sub_arg = psi_decl_arg_get_by_name(sub_args, name);
+                                       zend_string_release(name);
                                }
                                if (!name || !sub_arg) {
                                        /* remove expr for portability with different struct members */
@@ -349,11 +350,12 @@ static void *exec_let_func_arrval(struct psi_let_exp *val,
 
                if (frame_arg->zval_ptr) {
                        while (psi_plist_get(func->inner, i++, &inner)) {
-                               darg_member = psi_decl_arg_get_by_name(darg_members,
-                                               psi_let_exp_get_decl_var_name(inner));
+                               zend_string *var_name = psi_let_exp_get_decl_var_name(inner);
+                               darg_member = psi_decl_arg_get_by_name(darg_members, var_name);
 
                                exec_let_func_arrval_inner(func, darg, darg_member, frame_arg,
                                                inner, container, frame);
+                               zend_string_release(var_name);
                        }
                }
        } else if (func->inner) {