We are no longer offering accounts on this server. Consider https://gitlab.freedesktop.org/ as a place to host projects.

Commit d8212977 authored by Craig Andrews's avatar Craig Andrews

Use PHP exceptions for PEAR error handling.

Allows for the common try/catch construct, which makes error handling cleaner and easier.
parent f9dd83ca
......@@ -37,8 +37,6 @@ define('INSTALLDIR', dirname(__FILE__));
define('STATUSNET', true);
define('LACONICA', true); // compatibility
require_once INSTALLDIR . '/lib/common.php';
$user = null;
$action = null;
......@@ -68,13 +66,15 @@ function getPath($req)
*/
function handleError($error)
{
try {
if ($error->getCode() == DB_DATAOBJECT_ERROR_NODATA) {
return;
}
$logmsg = "PEAR error: " . $error->getMessage();
if (common_config('site', 'logdebug')) {
$logmsg .= " : ". $error->getDebugInfo();
if ($error instanceof PEAR_Exception && common_config('site', 'logdebug')) {
$logmsg .= " : ". $error->toText();
}
// DB queries often end up with a lot of newlines; merge to a single line
// for easier grepability...
......@@ -83,13 +83,14 @@ function handleError($error)
// @fixme backtrace output should be consistent with exception handling
if (common_config('site', 'logdebug')) {
$bt = $error->getBacktrace();
$bt = $error->getTrace();
foreach ($bt as $n => $line) {
common_log(LOG_ERR, formatBacktraceLine($n, $line));
}
}
if ($error instanceof DB_DataObject_Error
|| $error instanceof DB_Error
|| ($error instanceof PEAR_Exception && $error->getCode() == -24)
) {
$msg = sprintf(
_(
......@@ -111,9 +112,17 @@ function handleError($error)
$dac = new DBErrorAction($msg, 500);
$dac->showPage();
} catch (Exception $e) {
echo _('An error occurred.');
}
exit(-1);
}
set_exception_handler('handleError');
require_once INSTALLDIR . '/lib/common.php';
/**
* Format a backtrace line for debug output roughly like debug_print_backtrace() does.
* Exceptions already have this built in, but PEAR error objects just give us the array.
......@@ -238,10 +247,6 @@ function main()
return;
}
// For database errors
PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'handleError');
// Make sure RW database is setup
setupRW();
......
......@@ -71,6 +71,7 @@ if (!function_exists('dl')) {
# global configuration object
require_once('PEAR.php');
require_once('PEAR/Exception.php');
require_once('DB/DataObject.php');
require_once('DB/DataObject/Cast.php'); # for dates
......@@ -128,6 +129,17 @@ require_once INSTALLDIR.'/lib/activity.php';
require_once INSTALLDIR.'/lib/clientexception.php';
require_once INSTALLDIR.'/lib/serverexception.php';
//set PEAR error handling to use regular PHP exceptions
function PEAR_ErrorToPEAR_Exception($err)
{
if ($err->getCode()) {
throw new PEAR_Exception($err->getMessage(), $err->getCode());
}
throw new PEAR_Exception($err->getMessage());
}
PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'PEAR_ErrorToPEAR_Exception');
try {
StatusNet::init(@$server, @$path, @$conffile);
} catch (NoConfigException $e) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment