Index: includes/common.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/common.inc,v retrieving revision 1.770 diff -u -r1.770 common.inc --- includes/common.inc 30 May 2008 17:41:51 -0000 1.770 +++ includes/common.inc 3 Jun 2008 13:49:32 -0000 @@ -606,6 +606,12 @@ drupal_set_message($entry, 'error'); } + if (!headers_sent()) { + static $index = 0; + $message = str_replace("\n", " ", $message); + header("X-Drupal-Error-$index: " . $errno . "|" . $filename . "|" . $line . "|" . $message); + $index++; + } watchdog('php', '%message in %file on line %line.', array('%error' => $types[$errno], '%message' => $message, '%file' => $filename, '%line' => $line), WATCHDOG_ERROR); } } Index: modules/simpletest/drupal_web_test_case.php =================================================================== RCS file: /cvs/drupal/drupal/modules/simpletest/drupal_web_test_case.php,v retrieving revision 1.11 diff -u -r1.11 drupal_web_test_case.php --- modules/simpletest/drupal_web_test_case.php 2 Jun 2008 17:39:12 -0000 1.11 +++ modules/simpletest/drupal_web_test_case.php 3 Jun 2008 13:49:43 -0000 @@ -486,9 +486,22 @@ } $curl_options[CURLOPT_USERPWD] = $auth; } + $curl_options[CURLOPT_HEADERFUNCTION] = array($this, 'readHeader'); return $this->curlExec($curl_options); } } + + /** + * Read an HTTP header returned in the current response. + */ + protected function readHeader($ch, $header) { + if (preg_match("@^X-Drupal-Error-[0-9]+: ([^|]+)\|([^|]+)\|([^|]+)\|(.*)$@", $header, $matches)) { + list(, $severity, $filename, $line, $message) = $matches; + $message = trim($message); + $this->error(SimpleErrorQueue::getSeverityAsString($severity), $message, $filename, $line); + } + return strlen($header); + } /** * Peforms a cURL exec with the specified options after calling curlConnect().