fix leaks
[m6w6/ext-psi] / src / engine.c
index 0c170cb63f5e4839e5cde371752bd8726bd7b4ab..4415e4b093dc4c656f491d19798fa40754074e1f 100644 (file)
@@ -201,7 +201,7 @@ static inline ZEND_RESULT_CODE psi_parse_args(zend_execute_data *execute_data, i
                        Z_PARAM_FUNC_EX(fci, fcc, 1, 0);
 
                        if (fci.size) {
-                               iarg->val.zend.cb = calloc(1, sizeof(zend_fcall));
+                               iarg->val.zend.cb = ecalloc(1, sizeof(zend_fcall));
                                iarg->val.zend.cb->fci = fci;
                                iarg->val.zend.cb->fcc = fcc;
                        }
@@ -372,6 +372,14 @@ static inline void psi_do_clean(impl *impl)
                                zend_string_release(iarg->val.zend.str);
                        }
                        break;
+               case PSI_T_CALLABLE:
+                       if (iarg->val.zend.cb) {
+                               if (iarg->val.zend.cb->fci.size) {
+                                       zend_fcall_info_args_clear(&iarg->val.zend.cb->fci, 1);
+                               }
+                               efree(iarg->val.zend.cb);
+                       }
+                       break;
                }
        }