summaryrefslogtreecommitdiff
path: root/includes
diff options
context:
space:
mode:
Diffstat (limited to 'includes')
-rw-r--r--includes/module.inc8
1 files changed, 7 insertions, 1 deletions
diff --git a/includes/module.inc b/includes/module.inc
index dfa31a91d..748333a35 100644
--- a/includes/module.inc
+++ b/includes/module.inc
@@ -142,7 +142,13 @@ function module_implements($hook) {
}
}
- return $implementations[$hook];
+ // The explicit cast forces a copy to be made. This is needed because
+ // $implementations[$hook] is only a reference to an element of
+ // $implementations and if there are nested foreaches (due to nested node
+ // API calls, for example), they would both manipulate the same array's
+ // references, which causes some modules' hooks not to be called.
+ // See also http://www.zend.com/zend/art/ref-count.php.
+ return (array)$implementations[$hook];
}
/**