ID: 40033
User updated by: francisco dot a dot castillo at ge dot com
Reported By: francisco dot a dot castillo at ge dot com
-Status: Feedback
+Status: Open
Bug Type: Reproducible crash
Operating System: Linux Fedora Core 6
PHP Version: 5.2.0
New Comment:
Well, I saw that the backtrace threw a problem regarding the XSL, well,
I'll paste the code but I use a transformation when throwing an
exception, so, I could show it passing an XML to an XSL. This is the
code:
Throws the Exception:
try{
throw new PHPDevException($this ->
error,100,"DAO",$part,false,"SQL","SQL DAO",$qry); }catch
(PHPDevException $ac){
$ac -> toScreen();
die();
}
The Exception class:
<?
//require_once("classes/DAO.inc.php");
//require_once("Config.inc.php");
require_once("XSLoader.inc.php");
/**
* @author Francisco A. Castillo Guerrero. This class handles
* all the exceptions created by the assessment center
* redesign.
*/
class PHPDevException extends Exception{
protected $code;
protected $message;
protected $title;
protected $fclass;
protected $method;
protected $line;
protected $sys;
protected $uri;
protected $sql;
protected $redire;
/**
* This is the constructor of the exception class. This method
is
called when a new
* instance is created. This happens when you throw a new
PHPDevException.
* The parameters that receives are the following:
*
* @param String $errmsg
* @param int $errcode
* @param String $class
* @param String $method
* @param boolena $redire
* @param String $title
* @param String $system
* @param String $sql
*/
public function __construct($errmsg, $errcode, $class, $method,
$redire, $title = 'AC', $system = '', $sql = ''){
$this -> title = $title;
$this -> fclass = $class;
$this -> method = $method;
$this -> message = $errmsg;
$this -> code = $errcode;
$this -> line = parent::getLine();
$this -> sys = $system;
$this -> uri = $_SERVER['PHP_SELF'];
$this -> sql = $sql;
$this -> redire = $redire;
parent::__construct($errmsg,$errcode);
}
/**
* Inserts into the log table, the content of this Exception.
* In the imformation inserted includes parameters from the
* same class and are the following:
*
* @param Date ltime. Date of the insertion
* @param Long time_stamp. Time stamp of the date
* @param String cname Class name from the
generated exception
* @param String method Method of the class
where the exception was
thrown
* @param Int lineNumber Line where the
exception was thrown
* @param String system_name Name of the system
* @param String uri Part of the url
that generated the exception
* @param String Message Message of the exception
*
*/
public function toLog(){
// Log the content of the Exception.
$dao = new DAO(true);
$ts = mktime();
$date = date("Y/m/d", $ts);
$table = "logger(ltime, time_stamp, cname, method, lineNumber,
msg_code, system_name, uri, message)";
$vals = "'$date', $ts,'".
$this -> fclass."','".
$this -> method."',".
$this -> line.",'".
$this -> code."','".
$this -> sys."','".
$this -> uri."','".
$this -> message."'";
$dao -> insert($table,$vals);
$this -> redir();
}
/**
* Output the exception to the browser
*
*/
public function toScreen(){
$this -> redir();
print $this -> formatException($this -> message);
}
/**
* Outputs the exception and save it into the log
*
*/
public function toBoth(){
$this -> redir();
$this -> toScreen();
$this -> toLog();
}
/**
* Redirects the page if an exception is raised and if the
redirect
* flag is active (true) in the Config file
*
*/
private function redir(){
global $redirect;
if($this -> redire === true){
//header("Location: $redirect");
print
"<script>setTimeout('self.location.href=\"$redirect\"',0)</script>";
}
}
/**
* This method formats the output to be shown in the browser.
* Only receives the message to format and returns the
* formatted string
*
* @param String msg Message to format
* @return String em The HTML formated string
*/
private function formatException($msg){
$xml = "
<exception>
<title>".$this -> title." Exception Raised</title>
<content>
<element name='Query'><val>".$this ->
sql."</val></element>
<element name='Class'><val>".$this ->
fclass."</val></element>
<element name='Method'><val>".$this ->
method."</val></element>
<element name='Line Number'><val>".$this ->
line."</val></element>
<element
name='Description'><val>".$msg."</val></element>
</content>
</exception>";
//print $xml;die();
$path = getcwd()."\\exceptions";
return XSLoader::load($xml,"xslt\\".__CLASS__);
}
}
?>
The Transformer Class:
<?
class XSLoader
{
/**
* Transforms an XML with the XSL received and returns the
* transformed string.
*
* @param String $xml
* @param String $xsl_file
* @return String Transformed Document
*/
public function load($xml,$xsl_file)
{
$doc = new DOMDocument();
$xsl = new XSLTProcessor();
$doc -> load($xsl_file.'.xsl');
$xsl -> importStyleSheet($doc);
$doc -> loadXML($xml);
return $xsl -> transformToXML($doc);
}
}
?>
Thanks! Regards!
Previous Comments:
------------------------------------------------------------------------
[2007-01-05 22:01:22] [EMAIL PROTECTED]
Thank you for this bug report. To properly diagnose the problem, we
need a short but complete example script to be able to reproduce
this bug ourselves.
A proper reproducing script starts with <?php and ends with ?>,
is max. 10-20 lines long and does not require any external
resources such as databases, etc. If the script requires a
database to demonstrate the issue, please make sure it creates
all necessary tables, stored procedures etc.
Please avoid embedding huge scripts into the report.
------------------------------------------------------------------------
[2007-01-05 21:00:43] francisco dot a dot castillo at ge dot com
This is the backtrace:
#0 0x0120e61a in zif_xsl_xsltprocessor_import_stylesheet (ht=1,
return_value=0xa1003c0, return_value_ptr=0x0,
this_ptr=0xa0fffb0, return_value_used=0) at
/http/php-5.2.0/ext/xsl/xsltprocessor.c:387
#1 0x012789d8 in zend_do_fcall_common_helper_SPEC
(execute_data=0xbf871ba0) at
/http/php-5.2.0/Zend/zend_vm_execute.h:200
#2 0x0126a81d in execute (op_array=0xa0b65c8) at
/http/php-5.2.0/Zend/zend_vm_execute.h:92
#3 0x0127844c in zend_do_fcall_common_helper_SPEC
(execute_data=0xbf871ec0) at
/http/php-5.2.0/Zend/zend_vm_execute.h:234
#4 0x0126a81d in execute (op_array=0xa0bdfb4) at
/http/php-5.2.0/Zend/zend_vm_execute.h:92
#5 0x0127844c in zend_do_fcall_common_helper_SPEC
(execute_data=0xbf872070) at
/http/php-5.2.0/Zend/zend_vm_execute.h:234
#6 0x0126a81d in execute (op_array=0xa0bb158) at
/http/php-5.2.0/Zend/zend_vm_execute.h:92
#7 0x0127844c in zend_do_fcall_common_helper_SPEC
(execute_data=0xbf8722a0) at
/http/php-5.2.0/Zend/zend_vm_execute.h:234
#8 0x0126a81d in execute (op_array=0x9fa8404) at
/http/php-5.2.0/Zend/zend_vm_execute.h:92
#9 0x0127844c in zend_do_fcall_common_helper_SPEC
(execute_data=0xbf872520) at
/http/php-5.2.0/Zend/zend_vm_execute.h:234
#10 0x0126a81d in execute (op_array=0x9f9c1a8) at
/http/php-5.2.0/Zend/zend_vm_execute.h:92
#11 0x0127844c in zend_do_fcall_common_helper_SPEC
(execute_data=0xbf8726f0) at
/http/php-5.2.0/Zend/zend_vm_execute.h:234
#12 0x0126a81d in execute (op_array=0x9fb8fe0) at
/http/php-5.2.0/Zend/zend_vm_execute.h:92
#13 0x0127844c in zend_do_fcall_common_helper_SPEC
(execute_data=0xbf872880) at
/http/php-5.2.0/Zend/zend_vm_execute.h:234
#14 0x0126a81d in execute (op_array=0x9fa5b08) at
/http/php-5.2.0/Zend/zend_vm_execute.h:92
#15 0x0127844c in zend_do_fcall_common_helper_SPEC
(execute_data=0xbf872a20) at
/http/php-5.2.0/Zend/zend_vm_execute.h:234
#16 0x0126a81d in execute (op_array=0x9f9d934) at
/http/php-5.2.0/Zend/zend_vm_execute.h:92
#17 0x0127844c in zend_do_fcall_common_helper_SPEC
(execute_data=0xbf872ec0) at
/http/php-5.2.0/Zend/zend_vm_execute.h:234
#18 0x0126a81d in execute (op_array=0x9f9db54) at
/http/php-5.2.0/Zend/zend_vm_execute.h:92
#19 0x0127844c in zend_do_fcall_common_helper_SPEC
(execute_data=0xbf8730c0) at
/http/php-5.2.0/Zend/zend_vm_execute.h:234
#20 0x0126a81d in execute (op_array=0x9f9eefc) at
/http/php-5.2.0/Zend/zend_vm_execute.h:92
#21 0x0127844c in zend_do_fcall_common_helper_SPEC
(execute_data=0xbf8732c0) at
/http/php-5.2.0/Zend/zend_vm_execute.h:234
#22 0x0126a81d in execute (op_array=0x9f9b44c) at
/http/php-5.2.0/Zend/zend_vm_execute.h:92
#23 0x0124f1c2 in zend_execute_scripts (type=8, retval=<value optimized
out>, file_count=3)
at /http/php-5.2.0/Zend/zend.c:1097
#24 0x01211a13 in php_execute_script (primary_file=0xbf8755e8) at
/http/php-5.2.0/main/main.c:1758
#25 0x012c5420 in php_handler (r=0x9f90328) at
/http/php-5.2.0/sapi/apache2handler/sapi_apache2.c:592
#26 0x0807ac59 in ap_run_handler (r=0x9f90328) at config.c:157
#27 0x0807ddc1 in ap_invoke_handler (r=0x9f90328) at config.c:371
#28 0x080c0bb8 in ap_process_request (r=0x9f90328) at
http_request.c:258
#29 0x080bdebb in ap_process_http_connection (c=0x9f7e120) at
http_core.c:184
#30 0x08081a59 in ap_run_process_connection (c=0x9f7e120) at
connection.c:43
#31 0x080d6b50 in child_main (child_num_arg=<value optimized out>) at
prefork.c:640
#32 0x080d6db3 in make_child (s=0x9db8b58, slot=0) at prefork.c:680
#33 0x080d7b96 in ap_mpm_run (_pconf=0x9db20a8, plog=0x9dfa1c8,
s=0x9db8b58) at prefork.c:956
#34 0x08068a95 in main (argc=165347616, argv=0x9e804a8) at main.c:717
------------------------------------------------------------------------
[2007-01-05 15:25:56] [EMAIL PROTECTED]
Thank you for this bug report. To properly diagnose the problem, we
need a backtrace to see what is happening behind the scenes. To
find out how to generate a backtrace, please read
http://bugs.php.net/bugs-generating-backtrace.php for *NIX and
http://bugs.php.net/bugs-generating-backtrace-win32.php for Win32
Once you have generated a backtrace, please submit it to this bug
report and change the status back to "Open". Thank you for helping
us make PHP better.
------------------------------------------------------------------------
[2007-01-05 15:17:53] francisco dot a dot castillo at ge dot com
Description:
------------
I'm running PHP 5.2.0 with Apache 2.2 under a Fedora Core 6 Platform
and when I throw a new exception, the server crashes and I prompts me
to download the file. I try to throw different exceptions, including
ADODB and it stills do the same.
I've checked the logs but the only thing that I see at the apache's one
is
[Fri Jan 05 08:52:34 2007] [notice] child pid 14712 exit signal
Segmentation fault (11)
Reproduce code:
---------------
try{
throw new PHPDevException($this ->
error,100,"DAO",$part,false,"SQL","SQL DAO",$qry);
}catch (PHPDevException $ac){
$ac -> toScreen();
die();
}
Expected result:
----------------
Show a screen with the Formatted Exception, Including the description
of the class that threw it.
Actual result:
--------------
The browser prompts me to download the file and save it
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=40033&edit=1