mirror of
https://github.com/php/php-src.git
synced 2024-09-22 10:27:25 +00:00
Fix php_module_startup() when loading more than one additional module
Dereferencing addition_modules within php_module_startup would point to a vector entirely on the stack (which is of course, wrong). Use a specialized helper to keep BC with the current php_module_startup() calling semantics. Fixes 63159 Thanks to @a-j-k
This commit is contained in:
parent
6f52f566f3
commit
00a7b1ff7f
19
main/main.c
19
main/main.c
@ -1929,6 +1929,23 @@ int php_register_extensions(zend_module_entry **ptr, int count TSRMLS_DC)
|
||||
}
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
/* A very long time ago php_module_startup() was refactored in a way
|
||||
* which broke calling it with more than one additional module.
|
||||
* This alternative to php_register_extensions() works around that
|
||||
* by walking the shallower structure.
|
||||
*
|
||||
* See algo: https://bugs.php.net/bug.php?id=63159
|
||||
*/
|
||||
static int php_register_extensions_bc(zend_module_entry *ptr, int count TSRMLS_DC)
|
||||
{
|
||||
while (count--) {
|
||||
if (zend_register_internal_module(ptr++ TSRMLS_CC) == NULL) {
|
||||
return FAILURE;
|
||||
}
|
||||
}
|
||||
return SUCCESS;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
#if defined(PHP_WIN32) && _MSC_VER >= 1400
|
||||
@ -2199,7 +2216,7 @@ int php_module_startup(sapi_module_struct *sf, zend_module_entry *additional_mod
|
||||
}
|
||||
|
||||
/* start additional PHP extensions */
|
||||
php_register_extensions(&additional_modules, num_additional_modules TSRMLS_CC);
|
||||
php_register_extensions_bc(additional_modules, num_additional_modules TSRMLS_CC);
|
||||
|
||||
/* load and startup extensions compiled as shared objects (aka DLLs)
|
||||
as requested by php.ini entries
|
||||
|
Loading…
Reference in New Issue
Block a user