فهرست منبع

PHP7 adapt: fix zend_string memory leaks

Stefan Siegl 9 سال پیش
والد
کامیت
592d6528ca
3فایلهای تغییر یافته به همراه6 افزوده شده و 2 حذف شده
  1. 1 1
      v8js_array_access.cc
  2. 3 1
      v8js_object_export.cc
  3. 2 0
      v8js_v8.cc

+ 1 - 1
v8js_array_access.cc

@@ -32,7 +32,6 @@ static zval v8js_array_access_dispatch(zend_object *object, const char *method_n
 {
 	zend_fcall_info fci;
 	zval php_value;
-	ZVAL_UNDEF(&php_value);
 
 	fci.size = sizeof(fci);
 	fci.function_table = &object->ce->function_table;
@@ -51,6 +50,7 @@ static zval v8js_array_access_dispatch(zend_object *object, const char *method_n
 	fci.no_separation = 0;
 
 	zend_call_function(&fci, NULL TSRMLS_CC);
+	zval_dtor(&fci.function_name);
 	return php_value;
 }
 /* }}} */

+ 3 - 1
v8js_object_export.cc

@@ -48,7 +48,7 @@ static void v8js_call_php_func(zend_object *object, zend_function *method_ptr, v
 	max_num_args = method_ptr->common.num_args;
 
 	/* Function name to call */
-	ZVAL_STRING(&fname, ZSTR_VAL(method_ptr->common.function_name));
+	ZVAL_STR_COPY(&fname, method_ptr->common.function_name);
 
 	/* zend_fcall_info */
 	fci.size = sizeof(fci);
@@ -78,6 +78,7 @@ static void v8js_call_php_func(zend_object *object, zend_function *method_ptr, v
 		}
 		efree(error);
 		info.GetReturnValue().Set(return_value);
+		zval_dtor(&fname);
 		return;
 	}
 
@@ -147,6 +148,7 @@ failure:
 
 	return_value = zval_to_v8js(&retval, isolate TSRMLS_CC);
 	zval_dtor(&retval);
+	zval_dtor(&fname);
 
 	info.GetReturnValue().Set(return_value);
 }

+ 2 - 0
v8js_v8.cc

@@ -252,6 +252,8 @@ int v8js_get_properties_hash(v8::Handle<v8::Value> jsValue, HashTable *retval, i
 			} else {
 				zend_hash_update(retval, key, &value);
 			}
+
+			zend_string_release(key);
 		}
 		return SUCCESS;
 	}