summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrion Vibber <brion@status.net>2010-01-12 07:24:43 -0800
committerBrion Vibber <brion@status.net>2010-01-12 07:24:43 -0800
commitcbc3c7b141b8cfd8baa35a580e9fc9ae4f50343c (patch)
tree448b08216deef1ccb4acd7cfde68936ddd3f6764
parent116c5f6839adf518e2bfe27ad2899a474899a9a1 (diff)
Ticket 2152: avoid fatal when php.ini disables dl via disabled_functions (function_exists returns false even though it exists and cannot be redefined)
-rw-r--r--lib/common.php17
1 files changed, 13 insertions, 4 deletions
diff --git a/lib/common.php b/lib/common.php
index 7342c177a..b280afec0 100644
--- a/lib/common.php
+++ b/lib/common.php
@@ -45,11 +45,20 @@ define('FOREIGN_FRIEND_RECV', 2);
set_include_path(get_include_path() . PATH_SEPARATOR . INSTALLDIR . '/extlib/');
-# To protect against upstream libraries which haven't updated
-# for PHP 5.3 where dl() function may not be present...
+// To protect against upstream libraries which haven't updated
+// for PHP 5.3 where dl() function may not be present...
if (!function_exists('dl')) {
- function dl($library) {
- return false;
+ // function_exists() returns false for things in disable_functions,
+ // but they still exist and we'll die if we try to redefine them.
+ //
+ // Fortunately trying to call the disabled one will only trigger
+ // a warning, not a fatal, so it's safe to leave it for our case.
+ // Callers will be suppressing warnings anyway.
+ $disabled = array_filter(array_map('trim', explode(',', ini_get('disable_functions'))));
+ if (!in_array('dl', $disabled)) {
+ function dl($library) {
+ return false;
+ }
}
}