<?php /* vim: set expandtab sw=4 ts=4 sts=4: */ /** * Holds class PMA\libraries\Error * * @package PhpMyAdmin */ namespace PMA\libraries; use Exception; /** * a single error * * @package PhpMyAdmin */ class Error extends Message { /** * Error types * * @var array */ static public $errortype = array ( 0 => 'Internal error', E_ERROR => 'Error', E_WARNING => 'Warning', E_PARSE => 'Parsing Error', E_NOTICE => 'Notice', E_CORE_ERROR => 'Core Error', E_CORE_WARNING => 'Core Warning', E_COMPILE_ERROR => 'Compile Error', E_COMPILE_WARNING => 'Compile Warning', E_USER_ERROR => 'User Error', E_USER_WARNING => 'User Warning', E_USER_NOTICE => 'User Notice', E_STRICT => 'Runtime Notice', E_DEPRECATED => 'Deprecation Notice', E_RECOVERABLE_ERROR => 'Catchable Fatal Error', ); /** * Error levels * * @var array */ static public $errorlevel = array ( 0 => 'error', E_ERROR => 'error', E_WARNING => 'error', E_PARSE => 'error', E_NOTICE => 'notice', E_CORE_ERROR => 'error', E_CORE_WARNING => 'error', E_COMPILE_ERROR => 'error', E_COMPILE_WARNING => 'error', E_USER_ERROR => 'error', E_USER_WARNING => 'error', E_USER_NOTICE => 'notice', E_STRICT => 'notice', E_DEPRECATED => 'notice', E_RECOVERABLE_ERROR => 'error', ); /** * The file in which the error occurred * * @var string */ protected $file = ''; /** * The line in which the error occurred * * @var integer */ protected $line = 0; /** * Holds the backtrace for this error * * @var array */ protected $backtrace = array(); /** * Hide location of errors */ protected $hide_location = false; /** * Constructor * * @param integer $errno error number * @param string $errstr error message * @param string $errfile file * @param integer $errline line */ public function __construct($errno, $errstr, $errfile, $errline) { $this->setNumber($errno); $this->setMessage($errstr, false); $this->setFile($errfile); $this->setLine($errline); $backtrace = debug_backtrace(); // remove last three calls: // debug_backtrace(), handleError() and addError() $backtrace = array_slice($backtrace, 3); $this->setBacktrace($backtrace); } /** * Process backtrace to avoid path disclossures, objects and so on * * @param array $backtrace backtrace * * @return array */ public static function processBacktrace($backtrace) { $result = array(); $members = array('line', 'function', 'class', 'type'); foreach ($backtrace as $idx => $step) { /* Create new backtrace entry */ $result[$idx] = array(); /* Make path relative */ if (isset($step['file'])) { $result[$idx]['file'] = Error::relPath($step['file']); } /* Store members we want */ foreach ($members as $name) { if (isset($step[$name])) { $result[$idx][$name] = $step[$name]; } } /* Store simplified args */ if (isset($step['args'])) { foreach ($step['args'] as $key => $arg) { $result[$idx]['args'][$key] = Error::getArg($arg, $step['function']); } } } return $result; } /** * Toggles location hiding * * @param boolean $hide Whether to hide * * @return void */ public function setHideLocation($hide) { $this->hide_location = $hide; } /** * sets PMA\libraries\Error::$_backtrace * * We don't store full arguments to avoid wakeup or memory problems. * * @param array $backtrace backtrace * * @return void */ public function setBacktrace($backtrace) { $this->backtrace = Error::processBacktrace($backtrace); } /** * sets PMA\libraries\Error::$_line * * @param integer $line the line * * @return void */ public function setLine($line) { $this->line = $line; } /** * sets PMA\libraries\Error::$_file * * @param string $file the file * * @return void */ public function setFile($file) { $this->file = Error::relPath($file); } /** * returns unique PMA\libraries\Error::$hash, if not exists it will be created * * @return string PMA\libraries\Error::$hash */ public function getHash() { try { $backtrace = serialize($this->getBacktrace()); } catch(Exception $e) { $backtrace = ''; } if ($this->hash === null) { $this->hash = md5( $this->getNumber() . $this->getMessage() . $this->getFile() . $this->getLine() . $backtrace ); } return $this->hash; } /** * returns PMA\libraries\Error::$_backtrace for first $count frames * pass $count = -1 to get full backtrace. * The same can be done by not passing $count at all. * * @param integer $count Number of stack frames. * * @return array PMA\libraries\Error::$_backtrace */ public function getBacktrace($count = -1) { if ($count != -1) { return array_slice($this->backtrace, 0, $count); } return $this->backtrace; } /** * returns PMA\libraries\Error::$file * * @return string PMA\libraries\Error::$file */ public function getFile() { return $this->file; } /** * returns PMA\libraries\Error::$line * * @return integer PMA\libraries\Error::$line */ public function getLine() { return $this->line; } /** * returns type of error * * @return string type of error */ public function getType() { return Error::$errortype[$this->getNumber()]; } /** * returns level of error * * @return string level of error */ public function getLevel() { return Error::$errorlevel[$this->getNumber()]; } /** * returns title prepared for HTML Title-Tag * * @return string HTML escaped and truncated title */ public function getHtmlTitle() { return htmlspecialchars( mb_substr($this->getTitle(), 0, 100) ); } /** * returns title for error * * @return string */ public function getTitle() { return $this->getType() . ': ' . $this->getMessage(); } /** * Get HTML backtrace * * @return string */ public function getBacktraceDisplay() { return Error::formatBacktrace( $this->getBacktrace(), "<br />\n", "<br />\n" ); } /** * return formatted backtrace field * * @param array $backtrace Backtrace data * @param string $separator Arguments separator to use * @param string $lines Lines separator to use * * @return string formatted backtrace */ public static function formatBacktrace($backtrace, $separator, $lines) { $retval = ''; foreach ($backtrace as $step) { if (isset($step['file']) && isset($step['line'])) { $retval .= Error::relPath($step['file']) . '#' . $step['line'] . ': '; } if (isset($step['class'])) { $retval .= $step['class'] . $step['type']; } $retval .= Error::getFunctionCall($step, $separator); $retval .= $lines; } return $retval; } /** * Formats function call in a backtrace * * @param array $step backtrace step * @param string $separator Arguments separator to use * * @return string */ public static function getFunctionCall($step, $separator) { $retval = $step['function'] . '('; if (isset($step['args'])) { if (count($step['args']) > 1) { $retval .= $separator; foreach ($step['args'] as $arg) { $retval .= "\t"; $retval .= $arg; $retval .= ',' . $separator; } } elseif (count($step['args']) > 0) { foreach ($step['args'] as $arg) { $retval .= $arg; } } } $retval .= ')'; return $retval; } /** * Get a single function argument * * if $function is one of include/require * the $arg is converted to a relative path * * @param string $arg argument to process * @param string $function function name * * @return string */ public static function getArg($arg, $function) { $retval = ''; $include_functions = array( 'include', 'include_once', 'require', 'require_once', ); $connect_functions = array( 'mysql_connect', 'mysql_pconnect', 'mysqli_connect', 'mysqli_real_connect', 'connect', '_realConnect' ); if (in_array($function, $include_functions)) { $retval .= Error::relPath($arg); } elseif (in_array($function, $connect_functions) && getType($arg) === 'string' ) { $retval .= getType($arg) . ' ********'; } elseif (is_scalar($arg)) { $retval .= getType($arg) . ' ' . htmlspecialchars(var_export($arg, true)); } elseif (is_object($arg)) { $retval .= '<Class:' . get_class($arg) . '>'; } else { $retval .= getType($arg); } return $retval; } /** * Gets the error as string of HTML * * @return string */ public function getDisplay() { $this->isDisplayed(true); $retval = '<div class="' . $this->getLevel() . '">'; if (! $this->isUserError()) { $retval .= '<strong>' . $this->getType() . '</strong>'; $retval .= ' in ' . $this->getFile() . '#' . $this->getLine(); $retval .= "<br />\n"; } $retval .= $this->getMessage(); if (! $this->isUserError()) { $retval .= "<br />\n"; $retval .= "<br />\n"; $retval .= "<strong>Backtrace</strong><br />\n"; $retval .= "<br />\n"; $retval .= $this->getBacktraceDisplay(); } $retval .= '</div>'; return $retval; } /** * whether this error is a user error * * @return boolean */ public function isUserError() { return $this->hide_location || ($this->getNumber() & (E_USER_WARNING | E_USER_ERROR | E_USER_NOTICE)); } /** * return short relative path to phpMyAdmin basedir * * prevent path disclosure in error message, * and make users feel safe to submit error reports * * @param string $path path to be shorten * * @return string shortened path */ public static function relPath($path) { $dest = @realpath($path); /* Probably affected by open_basedir */ if ($dest === FALSE) { return basename($path); } $Ahere = explode( DIRECTORY_SEPARATOR, realpath(__DIR__ . DIRECTORY_SEPARATOR . '..') ); $Adest = explode(DIRECTORY_SEPARATOR, $dest); $result = '.'; // && count ($Adest)>0 && count($Ahere)>0 ) while (implode(DIRECTORY_SEPARATOR, $Adest) != implode(DIRECTORY_SEPARATOR, $Ahere)) { if (count($Ahere) > count($Adest)) { array_pop($Ahere); $result .= DIRECTORY_SEPARATOR . '..'; } else { array_pop($Adest); } } $path = $result . str_replace(implode(DIRECTORY_SEPARATOR, $Adest), '', $dest); return str_replace( DIRECTORY_SEPARATOR . PATH_SEPARATOR, DIRECTORY_SEPARATOR, $path ); } }
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
bfShapeFiles | Folder | 0755 |
|
|
config | Folder | 0755 |
|
|
controllers | Folder | 0755 |
|
|
dbi | Folder | 0755 |
|
|
di | Folder | 0755 |
|
|
engines | Folder | 0755 |
|
|
gis | Folder | 0755 |
|
|
navigation | Folder | 0755 |
|
|
plugins | Folder | 0755 |
|
|
properties | Folder | 0755 |
|
|
rte | Folder | 0755 |
|
|
sql-parser | Folder | 0755 |
|
|
Advisor.php | File | 15.13 KB | 0644 |
|
Config.php | File | 54.7 KB | 0644 |
|
Console.php | File | 14.82 KB | 0644 |
|
DatabaseInterface.php | File | 95.6 KB | 0644 |
|
DbList.php | File | 1.9 KB | 0644 |
|
DbQbe.php | File | 68.87 KB | 0644 |
|
DbSearch.php | File | 17.21 KB | 0644 |
|
DisplayResults.php | File | 206 KB | 0644 |
|
Error.php | File | 12.7 KB | 0644 |
|
ErrorHandler.php | File | 16.48 KB | 0644 |
|
File.php | File | 18.82 KB | 0644 |
|
Font.php | File | 4.24 KB | 0644 |
|
Footer.php | File | 10.52 KB | 0644 |
|
Header.php | File | 25.34 KB | 0644 |
|
Index.php | File | 23.79 KB | 0644 |
|
IndexColumn.php | File | 4.46 KB | 0644 |
|
Language.php | File | 4.27 KB | 0644 |
|
LanguageManager.php | File | 20.75 KB | 0644 |
|
Linter.php | File | 5.02 KB | 0644 |
|
ListAbstract.php | File | 3.15 KB | 0644 |
|
ListDatabase.php | File | 4.62 KB | 0644 |
|
Menu.php | File | 21.14 KB | 0644 |
|
Message.php | File | 18.67 KB | 0644 |
|
OutputBuffering.php | File | 3.59 KB | 0644 |
|
PDF.php | File | 3.94 KB | 0644 |
|
Partition.php | File | 7.26 KB | 0644 |
|
Psr4Autoloader.php | File | 4.85 KB | 0644 |
|
RecentFavoriteTable.php | File | 11.78 KB | 0644 |
|
Response.php | File | 12.61 KB | 0644 |
|
SavedSearches.php | File | 11.67 KB | 0644 |
|
Scripts.php | File | 7.38 KB | 0644 |
|
ServerStatusData.php | File | 15.72 KB | 0644 |
|
StorageEngine.php | File | 13.61 KB | 0644 |
|
SubPartition.php | File | 3.52 KB | 0644 |
|
SysInfo.php | File | 799 B | 0644 |
|
SysInfoLinux.php | File | 1.92 KB | 0644 |
|
SysInfoSunOS.php | File | 1.86 KB | 0644 |
|
SysInfoWINNT.php | File | 3.08 KB | 0644 |
|
SystemDatabase.php | File | 3.66 KB | 0644 |
|
Table.php | File | 88.12 KB | 0644 |
|
Template.php | File | 4.45 KB | 0644 |
|
Theme.php | File | 11.34 KB | 0644 |
|
ThemeManager.php | File | 12.91 KB | 0644 |
|
Tracker.php | File | 30.35 KB | 0644 |
|
Types.php | File | 6.08 KB | 0644 |
|
TypesMySQL.php | File | 17.26 KB | 0644 |
|
Util.php | File | 172.46 KB | 0644 |
|
VersionInformation.php | File | 7.87 KB | 0644 |
|
ZipFile.php | File | 6.63 KB | 0644 |
|
advisor.lib.php | File | 1.6 KB | 0644 |
|
advisory_rules.txt | File | 25.94 KB | 0644 |
|
autoloader.php | File | 450 B | 0644 |
|
bookmark.lib.php | File | 8.5 KB | 0644 |
|
browse_foreigners.lib.php | File | 9.83 KB | 0644 |
|
central_columns.lib.php | File | 49.38 KB | 0644 |
|
charset_conversion.lib.php | File | 3.54 KB | 0644 |
|
check_user_privileges.lib.php | File | 10.65 KB | 0644 |
|
cleanup.lib.php | File | 1.29 KB | 0644 |
|
common.inc.php | File | 34.38 KB | 0644 |
|
config.default.php | File | 66.5 KB | 0644 |
|
config.values.php | File | 10.17 KB | 0644 |
|
core.lib.php | File | 29.94 KB | 0644 |
|
create_addfield.lib.php | File | 15.68 KB | 0644 |
|
database_interface.inc.php | File | 2.63 KB | 0644 |
|
db_common.inc.php | File | 3.12 KB | 0644 |
|
db_designer.lib.php | File | 10.4 KB | 0644 |
|
db_table_exists.lib.php | File | 3.21 KB | 0644 |
|
display_change_password.lib.php | File | 5.45 KB | 0644 |
|
display_create_table.lib.php | File | 1.53 KB | 0644 |
|
display_export.lib.php | File | 38.11 KB | 0644 |
|
display_git_revision.lib.php | File | 3.04 KB | 0644 |
|
display_import.lib.php | File | 24.34 KB | 0644 |
|
display_import_ajax.lib.php | File | 3.13 KB | 0644 |
|
display_select_lang.lib.php | File | 2.36 KB | 0644 |
|
error.inc.php | File | 1.21 KB | 0644 |
|
error_report.lib.php | File | 10.25 KB | 0644 |
|
export.lib.php | File | 35.16 KB | 0644 |
|
file_listing.lib.php | File | 2.37 KB | 0644 |
|
iconv_wrapper.lib.php | File | 3.88 KB | 0644 |
|
import.lib.php | File | 50.64 KB | 0644 |
|
index.lib.php | File | 1.37 KB | 0644 |
|
information_schema_relations.lib.php | File | 10.95 KB | 0644 |
|
insert_edit.lib.php | File | 112.79 KB | 0644 |
|
ip_allow_deny.lib.php | File | 9.35 KB | 0644 |
|
js_escape.lib.php | File | 4.43 KB | 0644 |
|
kanji-encoding.lib.php | File | 4.46 KB | 0644 |
|
language_stats.inc.php | File | 1.45 KB | 0644 |
|
logging.lib.php | File | 521 B | 0644 |
|
mime.lib.php | File | 704 B | 0644 |
|
mult_submits.inc.php | File | 10.64 KB | 0644 |
|
mult_submits.lib.php | File | 20.44 KB | 0644 |
|
mysql_charsets.inc.php | File | 4.09 KB | 0644 |
|
mysql_charsets.lib.php | File | 10.47 KB | 0644 |
|
mysql_relations.lib.php | File | 5.12 KB | 0644 |
|
normalization.lib.php | File | 33.98 KB | 0644 |
|
opendocument.lib.php | File | 7.94 KB | 0644 |
|
operations.lib.php | File | 73.64 KB | 0644 |
|
parse_analyze.lib.php | File | 2.12 KB | 0644 |
|
plugin_interface.lib.php | File | 19.69 KB | 0644 |
|
plugin_interface.lib.php.bak | File | 19.69 KB | 0644 |
|
pmd_common.php | File | 24.2 KB | 0644 |
|
relation.lib.php | File | 68.41 KB | 0644 |
|
relation_cleanup.lib.php | File | 13.84 KB | 0644 |
|
replication.inc.php | File | 8.82 KB | 0644 |
|
replication_gui.lib.php | File | 37.45 KB | 0644 |
|
sanitizing.lib.php | File | 6.3 KB | 0644 |
|
select_server.lib.php | File | 3.4 KB | 0644 |
|
server_common.inc.php | File | 1.22 KB | 0644 |
|
server_common.lib.php | File | 1.92 KB | 0644 |
|
server_privileges.lib.php | File | 179.22 KB | 0644 |
|
server_status.lib.php | File | 9.92 KB | 0644 |
|
server_status_advisor.lib.php | File | 1.89 KB | 0644 |
|
server_status_monitor.lib.php | File | 26.22 KB | 0644 |
|
server_status_processes.lib.php | File | 9.57 KB | 0644 |
|
server_status_queries.lib.php | File | 4.86 KB | 0644 |
|
server_status_variables.lib.php | File | 28.95 KB | 0644 |
|
server_user_groups.lib.php | File | 12.8 KB | 0644 |
|
server_users.lib.php | File | 1.35 KB | 0644 |
|
session.inc.php | File | 5.22 KB | 0644 |
|
session.lib.php | File | 735 B | 0644 |
|
special_schema_links.lib.php | File | 17.51 KB | 0644 |
|
sql.lib.php | File | 77.51 KB | 0644 |
|
sql.lib.php.bak | File | 77.51 KB | 0644 |
|
sql_query_form.lib.php | File | 15.71 KB | 0644 |
|
string.lib.php | File | 800 B | 0644 |
|
stringMb.lib.php | File | 1.86 KB | 0644 |
|
stringNative.lib.php | File | 6.82 KB | 0644 |
|
sysinfo.lib.php | File | 1.34 KB | 0644 |
|
tbl_columns_definition_form.inc.php | File | 13.55 KB | 0644 |
|
tbl_common.inc.php | File | 1.3 KB | 0644 |
|
tbl_info.inc.php | File | 3.54 KB | 0644 |
|
tbl_partition_definition.inc.php | File | 5.55 KB | 0644 |
|
tracking.lib.php | File | 54.93 KB | 0644 |
|
transformations.lib.php | File | 14.63 KB | 0644 |
|
url_generating.lib.php | File | 6.77 KB | 0644 |
|
user_preferences.inc.php | File | 2.38 KB | 0644 |
|
user_preferences.lib.php | File | 8.17 KB | 0644 |
|
util.lib.php | File | 749 B | 0644 |
|
vendor_config.php | File | 2.49 KB | 0644 |
|
zip_extension.lib.php | File | 5.38 KB | 0644 |
|