See: http://drupal.org/node/379504 diff -Nurp ../drupal-6.16.orig/includes/module.inc ./includes/module.inc --- ../drupal-6.16.orig/includes/module.inc 2010-04-23 14:03:18.000000000 -0500 +++ ./includes/module.inc 2010-04-23 14:04:11.000000000 -0500 @@ -243,15 +243,15 @@ function module_load_install($module) { /** * Load a module include file. - * + * * Examples: * @code * // Load node.admin.inc from the node module. * module_load_include('inc', 'node', 'node.admin'); * // Load content_types.inc from the node module. - * module_load_include('inc', 'node', 'content_types'); + * module_load_include('inc', 'node', 'content_types'); * @endcode - * + * * Do not use this function to load an install file. Use module_load_install() * instead. * @@ -260,7 +260,7 @@ function module_load_install($module) { * @param $module * The module to which the include file belongs. * @param $name - * Optionally, specify the base file name (without the $type extension). + * Optionally, specify the base file name (without the $type extension). * If not set, $module is used. */ function module_load_include($type, $module, $name = NULL) { @@ -458,8 +458,15 @@ function module_invoke() { $hook = $args[1]; unset($args[0], $args[1]); $function = $module .'_'. $hook; - if (module_hook($module, $hook)) { - return call_user_func_array($function, $args); + + // Only call this function if it is not an internal function. + // This is done to prevent functional naming conflicts that can happen with any PHP upgrade, see: http://drupal.org/node/379504. + $defined = get_defined_functions(); + + if (is_array($defined) && array_key_exists('user', $defined) && in_array($function, $defined['user'])){ + if (module_hook($module, $hook)) { + return call_user_func_array($function, $args); + } } } /** @@ -480,12 +487,19 @@ function module_invoke_all() { $return = array(); foreach (module_implements($hook) as $module) { $function = $module .'_'. $hook; - $result = call_user_func_array($function, $args); - if (isset($result) && is_array($result)) { - $return = array_merge_recursive($return, $result); - } - else if (isset($result)) { - $return[] = $result; + + // Only call this function if it is not an internal function. + // This is done to prevent functional naming conflicts that can happen with any PHP upgrade, see: http://drupal.org/node/379504. + $defined = get_defined_functions(); + + if (is_array($defined) && array_key_exists('user', $defined) && in_array($function, $defined['user'])){ + $result = call_user_func_array($function, $args); + if (isset($result) && is_array($result)) { + $return = array_merge_recursive($return, $result); + } + else if (isset($result)) { + $return[] = $result; + } } }