From 858e25bf8e7c69b856b40372e9a8ca6a23bb1c3c Mon Sep 17 00:00:00 2001 From: Emiel Bruijntjes Date: Sat, 12 Apr 2014 11:17:49 +0200 Subject: fixed wrong memory deallocation when php.ini entries were unregistered (issue #64) --- zend/extensionimpl.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'zend/extensionimpl.cpp') diff --git a/zend/extensionimpl.cpp b/zend/extensionimpl.cpp index 5e03736..04308c8 100644 --- a/zend/extensionimpl.cpp +++ b/zend/extensionimpl.cpp @@ -115,16 +115,16 @@ int ExtensionImpl::processStartup(int type, int module_number TSRMLS_DC) auto *extension = find(module_number TSRMLS_CC); // array contains ini settings - zend_ini_entry *ini_entries = new zend_ini_entry[extension->_data->iniVariables()+1]; + _ini = new zend_ini_entry[extension->_data->iniVariables()+1]; // the entry that we're filling int i=0; // Fill the php.ini entries - extension->_data->iniVariables([ini_entries, &i, module_number](Ini &ini) { + extension->_data->iniVariables([this, &i, module_number](Ini &ini) { // initialize the function - zend_ini_entry *entry = &ini_entries[i]; + zend_ini_entry *entry = &_ini[i]; // fill the property ini.fill(entry, module_number); @@ -134,10 +134,10 @@ int ExtensionImpl::processStartup(int type, int module_number TSRMLS_DC) }); // last entry should be set to all zero's - memset(&ini_entries[i], 0, sizeof(zend_ini_entry)); + memset(&_ini[i], 0, sizeof(zend_ini_entry)); // register ini entries in Zend core - REGISTER_INI_ENTRIES(); + zend_register_ini_entries(_ini, module_number TSRMLS_CC); // initialize the extension extension->initialize(TSRMLS_C); @@ -161,11 +161,8 @@ int ExtensionImpl::processShutdown(int type, int module_number TSRMLS_DC) // get the extension auto *extension = find(module_number TSRMLS_CC); - - UNREGISTER_INI_ENTRIES(); - // free memory from array ini entries - static zend_ini_entry *ini_entries; - delete [] ini_entries; + // unregister the ini entries + zend_unregister_ini_entries(module_number TSRMLS_CC); // is the callback registered? if (extension->_onShutdown) extension->_onShutdown(); @@ -262,6 +259,9 @@ ExtensionImpl::ExtensionImpl(Extension *data, const char *name, const char *vers */ ExtensionImpl::~ExtensionImpl() { + // deallocate the php.ini entries + if (_ini) delete[] _ini; + // deallocate functions if (_entry.functions) delete[] _entry.functions; } -- cgit v1.2.3