mirror of
https://github.com/php/php-src.git
synced 2024-09-22 18:37: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;
|
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
|
#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 */
|
/* 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)
|
/* load and startup extensions compiled as shared objects (aka DLLs)
|
||||||
as requested by php.ini entries
|
as requested by php.ini entries
|
||||||
|
Loading…
Reference in New Issue
Block a user