ID:               15511
 Updated by:       [EMAIL PROTECTED]
-Summary:          sablotron and php : segfault in
                   Situation::generateMessage
-Reported By:      [EMAIL PROTECTED]
+Reported By:      [EMAIL PROTECTED]
-Status:           Open
+Status:           Bogus
 Bug Type:         Sablotron XSL
-Operating System: Linux mandrake 8.0
+Operating System: Windows XP (Professional)
 PHP Version:      4.1.1
 New Comment:

Thank you for taking the time to report a problem with PHP.
Unfortunately your version of PHP is too old -- the problem
might already be fixed. Please download a new PHP
version from http://www.php.net/downloads.php

If you are able to reproduce the bug with one of the latest
versions of PHP, please change the PHP version on this bug report
to the version you tested and change the status back to "Open".
Again, thank you for your continued support of PHP.




Previous Comments:
------------------------------------------------------------------------

[2002-02-11 15:02:09] [EMAIL PROTECTED]

(this transcript originally posted to sablotron ml at address
http://archive.gingerall.cz/archives/sablot/msg00252.html .
they suggested me to post on php bugtracking too. An attached script
was posted and it's available at the above address. This mail was
transcripted here only for possible future reference. please contact me
if you need more data)
 
----------------------------

hi all... i'm using

- apache 1.3.23
- php 4.1.1
- expat 1.95.2
- Sablotron 0.82
- Linux Mandrake 8.0

i'm tring to parse the xml/xsl files i provide as attachment. parsing
them with
sabcmd give me the correct output. Parsing it through apache lead to a
brute
connection closed that smells a lot of segfault. So i tried to track
down the
problem. I compiled php as cgi executable and tried to parse the php
from gdb.
this is the result


(gdb) run
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /usr/local/bin/php -f slashdot.php
 
 
Program received signal SIGSEGV, Segmentation fault.
0x400d7765 in Situation::generateMessage (this=0x3e73746e,
type=538976288, code=538976288, arg1=@0x20202020,
    arg2=@0x20202020, theMessage=@0x20202020) at situa.cpp:279
279         if (messenger && !(flags & SAB_NO_ERROR_REPORTING))
(gdb)

good... stack corruption

(gdb) bt
#0  0x400d7765 in Situation::generateMessage (this=0x3e73746e,
type=538976288, code=538976288,
    arg1=@0x20202020, arg2=@0x20202020, theMessage=@0x20202020) at
situa.cpp:279
#1  0x656d6d6f in ?? ()
Cannot access memory at address 0x632f3c35
(gdb)

please note that 0x656d6d6f is "emmo" which really seems "cOMMEnt"
reversed. Also 0x632f3c35
is "c/<5" which is "5</c" from reversed "<comments>105</comments>".
arg1 and arg2 are filled
with spaces. as my file is (however, it crashes even without trailing
spaces)

If you need more data contact me.

a few debug:

(gdb) break *0x400d7cb8
Breakpoint 2 at 0x400d7cb8: file situa.cpp, line 350.
(gdb) run
The program being debugged has been started already.
Start it from the beginning? (y or n) y
 
Starting program: /usr/local/bin/php -f
/usr/local/apache/htdocs/slashdot.php
Breakpoint 2 at 0x400d7cb8
Breakpoint 2 at 0x400d7cb8: file situa.cpp, line 350.
 
 
Breakpoint 2, Situation::message (this=0x81bc890, type=MT_LOG,
code=L_START, arg1=@0xbfffdd10,
    arg2=@0xbfffdd20) at situa.cpp:350
350         if (code == E2_SDOM)
(gdb) cont
Continuing.
 
Breakpoint 2, Situation::message (this=0x81bc890, type=MT_LOG,
code=L1_PARSING, arg1=@0x81b3b88,
    arg2=@0xbfffda70) at situa.cpp:350
350         if (code == E2_SDOM)
(gdb) n
357             if (type == MT_ERROR)
(gdb)
361         Str temp;
(gdb)
362         if (type == MT_ERROR)
(gdb)
364         generateMessage(type, code, arg1, arg2, temp);
(gdb)
 
Program received signal SIGSEGV, Segmentation fault.
0x400d7765 in Situation::generateMessage (this=0x3e73746e,
type=538976288, code=538976288, arg1=@0x20202020,
    arg2=@0x20202020, theMessage=@0x20202020) at situa.cpp:279
279         if (messenger && !(flags & SAB_NO_ERROR_REPORTING))
(gdb)



---------------


(gdb) run
The program being debugged has been started already.
Start it from the beginning? (y or n) y

Starting program: /usr/local/bin/php -f
/usr/local/apache/htdocs/slashdot.php
Breakpoint 2 at 0x400d7cb8
Breakpoint 2 at 0x400d7cb8: file situa.cpp, line 350.


ciao
Breakpoint 2, Situation::message (this=0x81bc890, type=MT_LOG,
code=L_START, arg1=@0xbfffdd10,
    arg2=@0xbfffdd20) at situa.cpp:350
350         if (code == E2_SDOM)
(gdb) cont
Continuing.

Breakpoint 2, Situation::message (this=0x81bc890, type=MT_LOG,
code=L1_PARSING, arg1=@0x81b3b88,
    arg2=@0xbfffda70) at situa.cpp:350
350         if (code == E2_SDOM)
(gdb) n
357             if (type == MT_ERROR)
(gdb)
361         Str temp;
(gdb)
362         if (type == MT_ERROR)
(gdb)
364         generateMessage(type, code, arg1, arg2, temp);
(gdb) s
Situation::generateMessage (this=0x81bc890, type=MT_LOG,
code=L1_PARSING, arg1=@0x81b3b88, arg2=@0xbfffda70,
    theMessage=@0xbfffd9a0) at situa.cpp:227
227         PList<DStr*> out;
(gdb) n
228         void *messengerUD = NULL;
(gdb)
230         if (proc)
(gdb)
229         MessageHandler *messenger = NULL;
(gdb)
230         if (proc)
(gdb)
231             messenger = proc -> getMessageHandler(&messengerUD);
(gdb)
232         if (messenger)
(gdb)
234             out.append(new DStr("msgtype:"));
(gdb)
235             switch(type)
(gdb)
720         assert((ndx < nItems) && (ndx >= 0));
(gdb)
719     {
(gdb)
720         assert((ndx < nItems) && (ndx >= 0));
(gdb)
719     {
(gdb)
239             case MT_LOG: *(out[0]) += "log"; break;
(gdb)
242         if (type != MT_LOG)
(gdb)
247         if (messenger)
(gdb)
248             out.append(new DStr("module:Sablotron"));
(gdb)
249         if (!info.currFile.isEmpty())
(gdb)
254         if (info.currLine && type != MT_LOG)
(gdb)
259         if (info.currV && type != MT_LOG)
(gdb)
269         SabMsg *p = GetMessage(code);
(gdb)
271         if (p -> text[0])
(gdb) print p
$1 = (SabMsg *) 0x40110dd0
(gdb) print arg1
$2 = (Str &) @0x81b3b88: {
  text_ = 0x81b2b98 "<?xml version=\"1.0\"?>\n<backslash
xmlns:/backslash=\"http://slashdot.org/backslash.dtd\";;>\n<story>\n<title>Free
Stripped-Down 3D Studio
Max</title>\n<url>http://slashdot.org/article.pl?sid=00/07/30/2056209<"...,
byteLength_ = 2022, _vptr. = 0x40111d80}
(gdb) print arg2
$3 = (Str &) @0xbfffda70: {text_ = 0x81b19b8 "", byteLength_ = 0,
_vptr. = 0x40111d80}
(gdb) n
273             DStr msgText = messenger ? (char*)"msg:" : (char*)"";
(gdb)
274             sprintf(buf,p ->
text,(char*)(Str&)arg1,(char*)(Str&)arg2);
(gdb)
275             msgText += buf;
(gdb)
276             out.append(new DStr(msgText));
(gdb)
279         if (messenger && !(flags & SAB_NO_ERROR_REPORTING))
(gdb)
 
Program received signal SIGSEGV, Segmentation fault.
0x400d7765 in Situation::generateMessage (this=0x3e73746e,
type=538976288, code=538976288, arg1=@0x20202020,
    arg2=@0x20202020, theMessage=@0x20202020) at situa.cpp:279
279         if (messenger && !(flags & SAB_NO_ERROR_REPORTING))
(gdb)



------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=15511&edit=1

Reply via email to