Browse files

MDL-36901: Remove system paths from exceptions

Replaces any server paths, like dataroot, with a token
in exception messages and debug info.
  • Loading branch information...
1 parent fc58c23 commit 53c66110a878f4f4644728138ea97c22990263e3 @mrmark mrmark committed with stronk7 Mar 3, 2013
Showing with 40 additions and 0 deletions.
  1. +16 −0 lib/setuplib.php
  2. +24 −0 lib/tests/setuplib_test.php
View
16 lib/setuplib.php
@@ -526,6 +526,22 @@ function get_exception_info($ex) {
$debuginfo .= PHP_EOL.'$a contents: '.print_r($a, true);
}
+ // Remove some absolute paths from message and debugging info.
+ $searches = array();
+ $replaces = array();
+ $cfgnames = array('tempdir', 'cachedir', 'themedir',
+ 'langmenucachefile', 'langcacheroot', 'dataroot', 'dirroot');
+ foreach ($cfgnames as $cfgname) {
+ if (property_exists($CFG, $cfgname)) {
+ $searches[] = $CFG->$cfgname;
+ $replaces[] = "[$cfgname]";
+ }
+ }
+ if (!empty($searches)) {
+ $message = str_replace($searches, $replaces, $message);
+ $debuginfo = str_replace($searches, $replaces, $debuginfo);
+ }
+
// Be careful, no guarantee weblib.php is loaded.
if (function_exists('clean_text')) {
$message = clean_text($message);
View
24 lib/tests/setuplib_test.php
@@ -118,4 +118,28 @@ public function test_is_web_crawler() {
$this->assertTrue(is_web_crawler(), "$agent should be considered a search engine");
}
}
+
+ /**
+ * Test if get_exception_info() removes file system paths
+ */
+ public function test_exception_info_removes_serverpaths() {
+ global $CFG;
+
+ // This doesn't test them all possible ones, but these are set for unit tests.
+ $cfgnames = array('dataroot', 'dirroot', 'tempdir', 'cachedir');
+
+ $fixture = '';
+ $expected = '';
+ foreach ($cfgnames as $cfgname) {
+ if (!empty($CFG->$cfgname)) {
+ $fixture .= $CFG->$cfgname.' ';
+ $expected .= "[$cfgname] ";
+ }
+ }
+ $exception = new moodle_exception('generalexceptionmessage', 'error', '', $fixture, $fixture);
+ $exceptioninfo = get_exception_info($exception);
+
+ $this->assertContains($expected, $exceptioninfo->message, 'Exception message does not contain system paths');
+ $this->assertContains($expected, $exceptioninfo->debuginfo, 'Exception debug info does not contain system paths');
+ }
}

0 comments on commit 53c6611

Please sign in to comment.