forked from enlightenment/efl
Eina: Fix issue in the XML parser when a tag was in a comment or a CDATA.
SVN revision: 71518
This commit is contained in:
parent
4889dc71d2
commit
96bfc84a12
|
@ -290,4 +290,6 @@
|
||||||
* remove --disable-posix-threads and --disable-win32-threads
|
* remove --disable-posix-threads and --disable-win32-threads
|
||||||
from configure options, and detect automatically the threading
|
from configure options, and detect automatically the threading
|
||||||
support.
|
support.
|
||||||
|
Fix bug in the XML parser when a tag was in a comment or a
|
||||||
|
cdata
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,7 @@ Fixes:
|
||||||
and PPC).
|
and PPC).
|
||||||
* Portability issue with Eina_Value test suite when unsigned where not promoted to
|
* Portability issue with Eina_Value test suite when unsigned where not promoted to
|
||||||
unsigned long (case on Itanium).
|
unsigned long (case on Itanium).
|
||||||
|
* Fix issue in the XML parser when a tag was in a comment or a CDATA.
|
||||||
|
|
||||||
Eina 1.2.0
|
Eina 1.2.0
|
||||||
|
|
||||||
|
|
|
@ -159,6 +159,28 @@ _eina_simple_xml_tag_end_find(const char *itr, const char *itr_end)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline const char *
|
||||||
|
_eina_simple_xml_tag_comment_end_find(const char *itr, const char *itr_end)
|
||||||
|
{
|
||||||
|
for (; itr < itr_end; itr++)
|
||||||
|
if ((*itr == '-') &&
|
||||||
|
((itr + 1 < itr_end) && (*(itr + 1) == '-')) &&
|
||||||
|
((itr + 2 < itr_end) && (*(itr + 2) == '>')))
|
||||||
|
return itr + 2;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline const char *
|
||||||
|
_eina_simple_xml_tag_cdata_end_find(const char *itr, const char *itr_end)
|
||||||
|
{
|
||||||
|
for (; itr < itr_end; itr++)
|
||||||
|
if ((*itr == ']') &&
|
||||||
|
((itr + 1 < itr_end) && (*(itr + 1) == ']')) &&
|
||||||
|
((itr + 2 < itr_end) && (*(itr + 2) == '>')))
|
||||||
|
return itr + 2;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @endcond
|
* @endcond
|
||||||
*/
|
*/
|
||||||
|
@ -342,21 +364,17 @@ eina_simple_xml_parse(const char *buf, unsigned buflen, Eina_Bool strip, Eina_Si
|
||||||
toff = 0;
|
toff = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
p = _eina_simple_xml_tag_end_find(itr + 1 + toff, itr_end);
|
if (type == EINA_SIMPLE_XML_CDATA)
|
||||||
if (p)
|
p = _eina_simple_xml_tag_cdata_end_find(itr + 1 + toff, itr_end);
|
||||||
{
|
else if (type == EINA_SIMPLE_XML_COMMENT)
|
||||||
if (type == EINA_SIMPLE_XML_CDATA)
|
p = _eina_simple_xml_tag_comment_end_find(itr + 1 + toff, itr_end);
|
||||||
{
|
else
|
||||||
/* must end with ]]> */
|
p = _eina_simple_xml_tag_end_find(itr + 1 + toff, itr_end);
|
||||||
while ((p) && (memcmp(p - 2, "]]>", 3)))
|
|
||||||
p = _eina_simple_xml_tag_end_find(p + 1, itr_end);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((p) && (*p == '<'))
|
if ((p) && (*p == '<'))
|
||||||
{
|
{
|
||||||
type = EINA_SIMPLE_XML_ERROR;
|
type = EINA_SIMPLE_XML_ERROR;
|
||||||
toff = 0;
|
toff = 0;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p)
|
if (p)
|
||||||
|
|
|
@ -21,4 +21,6 @@
|
||||||
<trkpt lon="5.62314" lat="53.010303"/>
|
<trkpt lon="5.62314" lat="53.010303"/>
|
||||||
</trkseg>
|
</trkseg>
|
||||||
</trk>
|
</trk>
|
||||||
|
<!-- <foo>bar</foo> -->
|
||||||
|
<![CDATA[ <foo>bar</foo> ]]>
|
||||||
</gpx>
|
</gpx>
|
||||||
|
|
Loading…
Reference in New Issue