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;
+      }
     }
   }
 
