[Expat-bugs] [ expat-Bugs-214050 ] Segmentation fault in libxmltok
nobody
nobody@usw-sf-web1.sourceforge.net
Wed, 07 Mar 2001 01:55:34 -0800
Bugs #214050, was updated on 2000-09-11 07:41
You can respond by visiting:
http://sourceforge.net/tracker/?func=detail&atid=110127&aid=214050&group_id=10127
Category: None
Group: None
Status: Open
Priority: 5
Submitted By: christian liesch
Assigned to: Nobody/Anonymous
Summary: Segmentation fault in libxmltok
Initial Comment:
If I parse the following file (with an error near !DOCTYPE):
<?xml version="1.0" standalone="no"?>
<!-- etwas kommentar -->
!DOCTYPE OReilly:Books SYSTEM "dummy.dtd" [
<!ELEMENT OReilly:Books (OReilly:Product, OReilly:Price)>
<!ELEMENT OReilly:Product ANY>
<!ELEMENT OReilly:Price ANY>
]>
<OReilly:Books>
<OReilly:Product>XML Pocket Ref</OReilly:Product>
<OReilly:Price>8.95
</OReilly:Books>
I got the following with my gdb:
!DOCTYPE OReilly:Books SYSTEM "dummy.dtd" [
error:no element found
Program received signal SIGSEGV, Segmentation fault.
0x400269c5 in normal_updatePosition () from /usr/lib/libxmltok.so.1
(gdb) where
#0 0x400269c5 in normal_updatePosition () from /usr/lib/libxmltok.so.1
#1 0x4001b0d9 in XML_GetCurrentColumnNumber () from /usr/lib/libxmlparse.so.1
#2 0x8049154 in test_parse ()
#3 0x80491f5 in main ()
#4 0x4004da5e in __libc_start_main () at ../sysdeps/generic/libc-start.c:93
(gdb)
----------------------------------------------------------------------
Comment By: Nobody/Anonymous
Date: 2001-03-07 01:55
Message:
Logged In: NO
I could reproduce this on the a May 29 1999 version of
expat. The problem seems to be that *ptr in
PREFIX(updatePosition)() is a null byte, which chokes
somewhere inside the BYTE_TYPE macro. I fixed this (I
think), by testing for *ptr in the while loop. Here's the
patch:
*** xmltok_impl.c 1999/09/03 14:54:37 1.1.1.1
--- xmltok_impl.c 2001/03/07 09:49:46
***************
*** 1709,1715 ****
const char *end,
POSITION *pos)
{
! while (ptr != end) {
switch (BYTE_TYPE(enc, ptr)) {
#define LEAD_CASE(n) \
case BT_LEAD ## n: \
--- 1709,1715 ----
const char *end,
POSITION *pos)
{
! while (*ptr && ptr != end) {
switch (BYTE_TYPE(enc, ptr)) {
#define LEAD_CASE(n) \
case BT_LEAD ## n: \
----------------------------------------------------------------------
Comment By: Sam TH
Date: 2001-02-02 06:47
Message:
Could not reproduce this with CVS expat.
----------------------------------------------------------------------
Comment By: Sam TH
Date: 2001-02-02 06:38
Message:
Could not reproduce this with CVS expat.
----------------------------------------------------------------------
Comment By: Jacob Refstrup
Date: 2000-11-28 14:11
Message:
This appear to be fixed in 1.95.1
----------------------------------------------------------------------
You can respond by visiting:
http://sourceforge.net/tracker/?func=detail&atid=110127&aid=214050&group_id=10127