aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorredmatrix <git@macgirvin.com>2016-05-09 01:12:24 -0700
committerredmatrix <git@macgirvin.com>2016-05-09 01:12:24 -0700
commit6f486a3393fe33db70ef2f1684dd3b79768d1137 (patch)
tree4d6967687dcc9b1c9bbbdb443b0038146c31335a
parent94accd8a4c7500ee4f5c268fe7e84ad3ed9a6675 (diff)
downloadvolse-hubzilla-6f486a3393fe33db70ef2f1684dd3b79768d1137.tar.gz
volse-hubzilla-6f486a3393fe33db70ef2f1684dd3b79768d1137.tar.bz2
volse-hubzilla-6f486a3393fe33db70ef2f1684dd3b79768d1137.zip
prevent recursion in the database driver when debugging is enabled and the system config is not yet loaded - caused by calling get_config and making db calls within the logger function; which we then attempt to log...
-rw-r--r--Zotlabs/Module/Network.php4
-rwxr-xr-xinclude/dba/dba_driver.php23
-rwxr-xr-xinclude/dba/dba_mysqli.php8
-rw-r--r--include/dba/dba_postgres.php4
4 files changed, 26 insertions, 13 deletions
diff --git a/Zotlabs/Module/Network.php b/Zotlabs/Module/Network.php
index fdfa99c12..c88258a78 100644
--- a/Zotlabs/Module/Network.php
+++ b/Zotlabs/Module/Network.php
@@ -446,7 +446,7 @@ class Network extends \Zotlabs\Web\Controller {
$ordering = "commented";
if($load) {
-
+
// Fetch a page full of parent items for this page
$r = q("SELECT distinct item.id AS item_id, $ordering FROM item
@@ -469,7 +469,7 @@ class Network extends \Zotlabs\Web\Controller {
);
$_SESSION['loadtime'] = datetime_convert();
}
-
+
// Then fetch all the children of the parents that are on this page
$parents_str = '';
$update_unseen = '';
diff --git a/include/dba/dba_driver.php b/include/dba/dba_driver.php
index 3c5b0b67e..8e205a4aa 100755
--- a/include/dba/dba_driver.php
+++ b/include/dba/dba_driver.php
@@ -59,8 +59,9 @@ abstract class dba_driver {
const NULL_DATE = '0000-00-00 00:00:00';
const UTC_NOW = 'UTC_TIMESTAMP()';
- protected $debug = 0;
protected $db;
+
+ public $debug = 0;
public $connected = false;
public $error = false;
@@ -302,10 +303,10 @@ function q($sql) {
$stmt = vsprintf($sql, $args);
if($stmt === false) {
if(version_compare(PHP_VERSION, '5.4.0') >= 0)
- logger('dba: vsprintf error: ' .
+ db_logger('dba: vsprintf error: ' .
print_r(debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT, 1), true),LOGGER_NORMAL,LOG_CRIT);
else
- logger('dba: vsprintf error: ' . print_r(debug_backtrace(), true),LOGGER_NORMAL,LOG_CRIT);
+ db_logger('dba: vsprintf error: ' . print_r(debug_backtrace(), true),LOGGER_NORMAL,LOG_CRIT);
}
return $db->q($stmt);
}
@@ -314,7 +315,7 @@ function q($sql) {
* This will happen occasionally trying to store the
* session data after abnormal program termination
*/
- logger('dba: no database: ' . print_r($args,true),LOGGER_NORMAL,LOG_CRIT);
+ db_logger('dba: no database: ' . print_r($args,true),LOGGER_NORMAL,LOG_CRIT);
return false;
}
@@ -385,7 +386,19 @@ function db_getfunc($f) {
if(isset($lookup[$f]) && isset($lookup[$f][ACTIVE_DBTYPE]))
return $lookup[$f][ACTIVE_DBTYPE];
- logger('Unable to abstract DB function "'. $f . '" for dbtype ' . ACTIVE_DBTYPE, LOGGER_DEBUG, LOG_ERR);
+ db_logger('Unable to abstract DB function "'. $f . '" for dbtype ' . ACTIVE_DBTYPE, LOGGER_DEBUG, LOG_ERR);
return $f;
}
+// The logger function may make DB calls internally to query the system logging parameters.
+// This can cause a recursion if database debugging is enabled.
+// So this function preserves the current database debugging state and then turns it off while
+// doing the logger() call
+
+function db_logger($s,$level = LOGGER_NORMAL,$syslog = LOG_INFO) {
+ global $db;
+ $saved = $db->debug;
+ $db->debug = false;
+ logger($s,$level,$syslog);
+ $db->debug = $saved;
+} \ No newline at end of file
diff --git a/include/dba/dba_mysqli.php b/include/dba/dba_mysqli.php
index 57a7559a1..afd2aa642 100755
--- a/include/dba/dba_mysqli.php
+++ b/include/dba/dba_mysqli.php
@@ -38,7 +38,7 @@ class dba_mysqli extends dba_driver {
if($this->error) {
- logger('dba_mysqli: ERROR: ' . printable($sql) . "\n" . $this->error, LOGGER_NORMAL, LOG_ERR);
+ db_logger('dba_mysqli: ERROR: ' . printable($sql) . "\n" . $this->error, LOGGER_NORMAL, LOG_ERR);
if(file_exists('dbfail.out')) {
file_put_contents('dbfail.out', datetime_convert() . "\n" . printable($sql) . "\n" . $this->error . "\n", FILE_APPEND);
}
@@ -46,13 +46,13 @@ class dba_mysqli extends dba_driver {
if(($result === true) || ($result === false)) {
if($this->debug) {
- logger('dba_mysqli: DEBUG: ' . printable($sql) . ' returns ' . (($result) ? 'true' : 'false'), LOGGER_NORMAL,(($result) ? LOG_INFO : LOG_ERR));
+ db_logger('dba_mysqli: DEBUG: ' . printable($sql) . ' returns ' . (($result) ? 'true' : 'false'), LOGGER_NORMAL,(($result) ? LOG_INFO : LOG_ERR));
}
return $result;
}
if($this->debug) {
- logger('dba_mysqli: DEBUG: ' . printable($sql) . ' returned ' . $result->num_rows . ' results.', LOGGER_NORMAL, LOG_INFO);
+ db_logger('dba_mysqli: DEBUG: ' . printable($sql) . ' returned ' . $result->num_rows . ' results.', LOGGER_NORMAL, LOG_INFO);
}
$r = array();
@@ -61,7 +61,7 @@ class dba_mysqli extends dba_driver {
$r[] = $x;
$result->free_result();
if($this->debug) {
- logger('dba_mysqli: ' . printable(print_r($r,true)), LOGGER_NORMAL, LOG_INFO);
+ db_logger('dba_mysqli: ' . printable(print_r($r,true)), LOGGER_NORMAL, LOG_INFO);
}
}
return $r;
diff --git a/include/dba/dba_postgres.php b/include/dba/dba_postgres.php
index ba4366d13..03b29d703 100644
--- a/include/dba/dba_postgres.php
+++ b/include/dba/dba_postgres.php
@@ -50,7 +50,7 @@ class dba_postgres extends dba_driver {
$this->error = pg_last_error($this->db);
if($result === false || $this->error) {
- //logger('dba_postgres: ' . printable($sql) . ' returned false.' . "\n" . $this->error);
+ //db_logger('dba_postgres: ' . printable($sql) . ' returned false.' . "\n" . $this->error);
if(file_exists('dbfail.out'))
file_put_contents('dbfail.out', datetime_convert() . "\n" . printable($sql) . ' returned false' . "\n" . $this->error . "\n", FILE_APPEND);
}
@@ -67,7 +67,7 @@ class dba_postgres extends dba_driver {
$r[] = $x;
pg_free_result($result);
if($this->debug)
- logger('dba_postgres: ' . printable(print_r($r,true)));
+ db_logger('dba_postgres: ' . printable(print_r($r,true)));
}
return $r;
}