<?php /* vim: set expandtab sw=4 ts=4 sts=4: */ /** * Error reporting functions used to generate and submit error reports * * @package PhpMyAdmin */ if (! defined('PHPMYADMIN')) { exit; } /** * The generated file that contains the line numbers for the js files * If you change any of the js files you can run the scripts/line-counts.sh */ if (is_readable('js/line_counts.php')) { include_once 'js/line_counts.php'; } /** * the url where to submit reports to */ define('SUBMISSION_URL', "https://reports.phpmyadmin.net/incidents/create"); /** * returns the pretty printed error report data collected from the * current configuration or from the request parameters sent by the * error reporting js code. * * @return String the report */ function PMA_getPrettyReportData() { $report = PMA_getReportData(); return json_encode($report, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); } /** * returns the error report data collected from the current configuration or * from the request parameters sent by the error reporting js code. * * @param string $exception_type whether exception is 'js' or 'php' * * @return array error report if success, Empty Array otherwise */ function PMA_getReportData($exception_type = 'js') { $relParams = PMA_getRelationsParam(); // common params for both, php & js exceptions $report = array( "pma_version" => PMA_VERSION, "browser_name" => PMA_USR_BROWSER_AGENT, "browser_version" => PMA_USR_BROWSER_VER, "user_os" => PMA_USR_OS, "server_software" => $_SERVER['SERVER_SOFTWARE'], "user_agent_string" => $_SERVER['HTTP_USER_AGENT'], "locale" => $_COOKIE['pma_lang'], "configuration_storage" => is_null($relParams['db']) ? "disabled" : "enabled", "php_version" => phpversion() ); if ($exception_type == 'js') { if (empty($_REQUEST['exception'])) { return array(); } $exception = $_REQUEST['exception']; $exception["stack"] = PMA_translateStacktrace($exception["stack"]); List($uri, $script_name) = PMA_sanitizeUrl($exception["url"]); $exception["uri"] = $uri; unset($exception["url"]); $report ["exception_type"] = 'js'; $report ["exception"] = $exception; $report ["script_name"] = $script_name; $report ["microhistory"] = $_REQUEST['microhistory']; if (! empty($_REQUEST['description'])) { $report['steps'] = $_REQUEST['description']; } } elseif ($exception_type == 'php') { $errors = array(); // create php error report $i = 0; if (!isset($_SESSION['prev_errors']) || $_SESSION['prev_errors'] == '' ) { return array(); } foreach ($_SESSION['prev_errors'] as $errorObj) { /* @var $errorObj PMA\libraries\Error */ if ($errorObj->getLine() && $errorObj->getType() && $errorObj->getNumber() != E_USER_WARNING ) { $errors[$i++] = array( "lineNum" => $errorObj->getLine(), "file" => $errorObj->getFile(), "type" => $errorObj->getType(), "msg" => $errorObj->getOnlyMessage(), "stackTrace" => $errorObj->getBacktrace(5), "stackhash" => $errorObj->getHash() ); } } // if there were no 'actual' errors to be submitted. if ($i==0) { return array(); // then return empty array } $report ["exception_type"] = 'php'; $report["errors"] = $errors; } else { return array(); } return $report; } /** * Sanitize a url to remove the identifiable host name and extract the * current script name from the url fragment * * It returns two things in an array. The first is the uri without the * hostname and identifying query params. The second is the name of the * php script in the url * * @param String $url the url to sanitize * * @return array the uri and script name */ function PMA_sanitizeUrl($url) { $components = parse_url($url); if (isset($components["fragment"]) && preg_match("<PMAURL-\d+:>", $components["fragment"], $matches) ) { $uri = str_replace($matches[0], "", $components["fragment"]); $url = "https://example.com/" . $uri; $components = parse_url($url); } // get script name preg_match("<([a-zA-Z\-_\d]*\.php)$>", $components["path"], $matches); if (count($matches) < 2) { $script_name = 'index.php'; } else { $script_name = $matches[1]; } // remove deployment specific details to make uri more generic if (isset($components["query"])) { parse_str($components["query"], $query_array); unset($query_array["db"]); unset($query_array["table"]); unset($query_array["token"]); unset($query_array["server"]); $query = http_build_query($query_array); } else { $query = ''; } $uri = $script_name . "?" . $query; return array($uri, $script_name); } /** * Sends report data to the error reporting server * * @param array $report the report info to be sent * * @return String the reply of the server */ function PMA_sendErrorReport($report) { $data_string = json_encode($report); if (function_exists('curl_init')) { $curl_handle = curl_init(SUBMISSION_URL); if ($curl_handle === false) { return null; } $curl_handle = PMA\libraries\Util::configureCurl($curl_handle); curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt( $curl_handle, CURLOPT_HTTPHEADER, array('Expect:', 'Content-Type: application/json') ); curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $data_string); curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1); $response = curl_exec($curl_handle); curl_close($curl_handle); return $response; } else if (ini_get('allow_url_fopen')) { $context = array("http" => array( 'method' => 'POST', 'content' => $data_string, 'header' => "Content-Type: application/json\r\n", ) ); $context = PMA\libraries\Util::handleContext($context); $response = @file_get_contents( SUBMISSION_URL, false, stream_context_create($context) ); return $response; } return null; } /** * Returns number of lines in given javascript file. * * @param string $filename javascript filename * * @return Number of lines * * @todo Should gracefully handle non existing files */ function PMA_countLines($filename) { global $LINE_COUNT; if (defined('LINE_COUNTS')) { return $LINE_COUNT[$filename]; } // ensure that the file is inside the phpMyAdmin folder $depath = 1; foreach (explode('/', $filename) as $part) { if ($part == '..') { $depath--; } elseif ($part != '.' || $part === '') { $depath++; } if ($depath < 0) { return 0; } } $linecount = 0; $handle = fopen('./js/' . $filename, 'r'); while (!feof($handle)) { $line = fgets($handle); if ($line === false) { break; } $linecount++; } fclose($handle); return $linecount; } /** * returns the translated line number and the file name from the cumulative line * number and an array of files * * uses the $LINE_COUNT global array of file names and line numbers * * @param array $filenames list of files in order of concatenation * @param Integer $cumulative_number the cumulative line number in the * concatenated files * * @return array the filename and line number * Returns two variables in an array: * - A String $filename the filename where the requested cumulative number * exists * - Integer $linenumber the translated line number in the returned file */ function PMA_getLineNumber($filenames, $cumulative_number) { $cumulative_sum = 0; foreach ($filenames as $filename) { $filecount = PMA_countLines($filename); if ($cumulative_number <= $cumulative_sum + $filecount + 2) { $linenumber = $cumulative_number - $cumulative_sum; break; } $cumulative_sum += $filecount + 2; } if (! isset($filename)) { $filename = ''; } return array($filename, $linenumber); } /** * translates the cumulative line numbers in the stack trace as well as sanitize * urls and trim long lines in the context * * @param array $stack the stack trace * * @return array $stack the modified stack trace */ function PMA_translateStacktrace($stack) { foreach ($stack as &$level) { foreach ($level["context"] as &$line) { if (mb_strlen($line) > 80) { $line = mb_substr($line, 0, 75) . "//..."; } } if (preg_match("<js/get_scripts.js.php\?(.*)>", $level["url"], $matches)) { parse_str($matches[1], $vars); List($file_name, $line_number) = PMA_getLineNumber( $vars["scripts"], $level["line"] ); $level["filename"] = $file_name; $level["line"] = $line_number; } else { unset($level["context"]); List($uri, $script_name) = PMA_sanitizeUrl($level["url"]); $level["uri"] = $uri; $level["scriptname"] = $script_name; } unset($level["url"]); } unset($level); return $stack; } /** * generates the error report form to collect user description and preview the * report before being sent * * @return String the form */ function PMA_getErrorReportForm() { $datas = array( 'report_data' => PMA_getPrettyReportData(), 'hidden_inputs' => PMA_URL_getHiddenInputs(), 'hidden_fields' => null, ); $reportData = PMA_getReportData(); if (!empty($reportData)) { $datas['hidden_fields'] = PMA_getHiddenFields($reportData); } return PMA\libraries\Template::get('error/report_form') ->render($datas); }
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 |
|