Edit report at https://bugs.php.net/bug.php?id=63159&edit=1

 ID:                 63159
 Updated by:         paj...@php.net
 Reported by:        slangley at google dot com
 Summary:            Passing > 1 additional module to php_module_startup
                     causes a segfault
 Status:             Feedback
 Type:               Bug
 Package:            Reproducible crash
 Operating System:   N/A
 PHP Version:        5.4.7
 Block user comment: N
 Private report:     N

 New Comment:

oh, stupid me, coffee++ :-)

You must be the 1st to call it with more than one ;-)


Previous Comments:
------------------------------------------------------------------------
[2013-01-28 10:35:00] slangley at google dot com

I'll grab you a stack trace when I'm in to office tomorrow (need to remove my 
patch to get it to crash :)).... However you can pretty easily walk through the 
code.

int php_module_startup(sapi_module_struct *sf, zend_module_entry 
*additional_modules, uint num_additional_modules)

Takes a pointer to an array of zend_module_entry.

int php_register_extensions(zend_module_entry **ptr, int count TSRMLS_DC)


takes a pointer to an array of zend_module_entry pointers.

inside php_register_extensions it uses pointer arithmetic to enumerate the 
extensions. However, because php_module_startup has a pointer to an array of 
zend_module_entry rather than a pointer to an array of pointers of 
zend_module_entry it causes a segfault.

https://github.com/php/php-src/blob/master/main/main.c#L1961

https://github.com/php/php-src/blob/master/main/main.c#L1909

------------------------------------------------------------------------
[2013-01-28 10:28:53] paj...@php.net

http://lxr.php.net/xref/PHP_5_4/main/main.c#1910 looks perfectly fine to me.

Which value do you actually pass as count? Also provide a backtrace.

------------------------------------------------------------------------
[2013-01-28 10:25:44] slangley at google dot com

Suggest you look again - it is not possible to get past this line without 
segfaulting if there is more than one extension.

https://github.com/php/php-src/blob/master/main/main.c#L2191

------------------------------------------------------------------------
[2013-01-28 09:41:28] paj...@php.net

Works just fine here.

Which architecture do you use? Maybe some rounding issues? 

However I would suggest you to manually set the modules count to the right 
numbers 
instead, to avoid any kind of architecture specific troubles.

------------------------------------------------------------------------
[2013-01-28 09:21:38] slangley at google dot com

Sure - this will result in a segfault.

int register_moules(sapi_module_struct* sapi_module) {

  zend_module_entry modules[] = {
      my_module_1_entry,
      my_module_2_entry,
  };
  int module_count = sizeof(modules) / sizeof(zend_module_entry);

  return php_module_startup(sapi_module, modules, module_count);
}

------------------------------------------------------------------------


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

    https://bugs.php.net/bug.php?id=63159


-- 
Edit this bug report at https://bugs.php.net/bug.php?id=63159&edit=1

Reply via email to