mirror of
https://gitlab.gnome.org/GNOME/libxml2.git
synced 2024-10-26 20:25:14 +03:00
Fix timeout when handling recursive entities
Abort parsing early to avoid an almost infinite loop in certain error cases involving recursive entities. Found with libFuzzer.
This commit is contained in:
parent
45da175c14
commit
79301d3d5e
1
parser.c
1
parser.c
@ -7158,6 +7158,7 @@ xmlParseReference(xmlParserCtxtPtr ctxt) {
|
|||||||
ent->checked |= 1;
|
ent->checked |= 1;
|
||||||
if (ret == XML_ERR_ENTITY_LOOP) {
|
if (ret == XML_ERR_ENTITY_LOOP) {
|
||||||
xmlFatalErr(ctxt, XML_ERR_ENTITY_LOOP, NULL);
|
xmlFatalErr(ctxt, XML_ERR_ENTITY_LOOP, NULL);
|
||||||
|
xmlHaltParser(ctxt);
|
||||||
xmlFreeNodeList(list);
|
xmlFreeNodeList(list);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1,243 +1,123 @@
|
|||||||
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
||||||
<ent>&e; &e; &e; &e;</ent>
|
<ent>&e; &e; &e; &e;</ent>
|
||||||
^
|
^
|
||||||
test/errors/rec_ext.ent:2: parser error : chunk is not well balanced
|
|
||||||
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:1: parser error : Entity 'e' failed to parse
|
|
||||||
<ent>&e; &e; &e; &e;</ent>
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:2: parser error : chunk is not well balanced
|
|
||||||
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:1: parser error : Entity 'e' failed to parse
|
|
||||||
<ent>&e; &e; &e; &e;</ent>
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:2: parser error : chunk is not well balanced
|
|
||||||
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:1: parser error : Entity 'e' failed to parse
|
|
||||||
<ent>&e; &e; &e; &e;</ent>
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:2: parser error : chunk is not well balanced
|
|
||||||
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:1: parser error : Entity 'e' failed to parse
|
|
||||||
<ent>&e; &e; &e; &e;</ent>
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:2: parser error : chunk is not well balanced
|
|
||||||
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:1: parser error : Entity 'e' failed to parse
|
|
||||||
<ent>&e; &e; &e; &e;</ent>
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:2: parser error : chunk is not well balanced
|
|
||||||
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:1: parser error : Entity 'e' failed to parse
|
|
||||||
<ent>&e; &e; &e; &e;</ent>
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:2: parser error : chunk is not well balanced
|
|
||||||
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:1: parser error : Entity 'e' failed to parse
|
|
||||||
<ent>&e; &e; &e; &e;</ent>
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:2: parser error : chunk is not well balanced
|
|
||||||
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:1: parser error : Entity 'e' failed to parse
|
|
||||||
<ent>&e; &e; &e; &e;</ent>
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:2: parser error : chunk is not well balanced
|
|
||||||
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:1: parser error : Entity 'e' failed to parse
|
|
||||||
<ent>&e; &e; &e; &e;</ent>
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:2: parser error : chunk is not well balanced
|
|
||||||
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:1: parser error : Entity 'e' failed to parse
|
|
||||||
<ent>&e; &e; &e; &e;</ent>
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:2: parser error : chunk is not well balanced
|
|
||||||
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:1: parser error : Entity 'e' failed to parse
|
|
||||||
<ent>&e; &e; &e; &e;</ent>
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:2: parser error : chunk is not well balanced
|
|
||||||
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:1: parser error : Entity 'e' failed to parse
|
|
||||||
<ent>&e; &e; &e; &e;</ent>
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:2: parser error : chunk is not well balanced
|
|
||||||
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:1: parser error : Entity 'e' failed to parse
|
|
||||||
<ent>&e; &e; &e; &e;</ent>
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:2: parser error : chunk is not well balanced
|
|
||||||
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:1: parser error : Entity 'e' failed to parse
|
|
||||||
<ent>&e; &e; &e; &e;</ent>
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:2: parser error : chunk is not well balanced
|
|
||||||
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:1: parser error : Entity 'e' failed to parse
|
|
||||||
<ent>&e; &e; &e; &e;</ent>
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:2: parser error : chunk is not well balanced
|
|
||||||
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:1: parser error : Entity 'e' failed to parse
|
|
||||||
<ent>&e; &e; &e; &e;</ent>
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:2: parser error : chunk is not well balanced
|
|
||||||
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:1: parser error : Entity 'e' failed to parse
|
|
||||||
<ent>&e; &e; &e; &e;</ent>
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:2: parser error : chunk is not well balanced
|
|
||||||
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:1: parser error : Entity 'e' failed to parse
|
|
||||||
<ent>&e; &e; &e; &e;</ent>
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:2: parser error : chunk is not well balanced
|
|
||||||
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:1: parser error : Entity 'e' failed to parse
|
|
||||||
<ent>&e; &e; &e; &e;</ent>
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:2: parser error : chunk is not well balanced
|
|
||||||
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:1: parser error : Entity 'e' failed to parse
|
|
||||||
<ent>&e; &e; &e; &e;</ent>
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:2: parser error : chunk is not well balanced
|
|
||||||
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:1: parser error : Entity 'e' failed to parse
|
|
||||||
<ent>&e; &e; &e; &e;</ent>
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:2: parser error : chunk is not well balanced
|
|
||||||
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:1: parser error : Entity 'e' failed to parse
|
|
||||||
<ent>&e; &e; &e; &e;</ent>
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:2: parser error : chunk is not well balanced
|
|
||||||
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:1: parser error : Entity 'e' failed to parse
|
|
||||||
<ent>&e; &e; &e; &e;</ent>
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:2: parser error : chunk is not well balanced
|
|
||||||
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:1: parser error : Entity 'e' failed to parse
|
|
||||||
<ent>&e; &e; &e; &e;</ent>
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:2: parser error : chunk is not well balanced
|
|
||||||
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:1: parser error : Entity 'e' failed to parse
|
|
||||||
<ent>&e; &e; &e; &e;</ent>
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:2: parser error : chunk is not well balanced
|
|
||||||
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:1: parser error : Entity 'e' failed to parse
|
|
||||||
<ent>&e; &e; &e; &e;</ent>
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:2: parser error : chunk is not well balanced
|
|
||||||
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:1: parser error : Entity 'e' failed to parse
|
|
||||||
<ent>&e; &e; &e; &e;</ent>
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:2: parser error : chunk is not well balanced
|
|
||||||
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:1: parser error : Entity 'e' failed to parse
|
|
||||||
<ent>&e; &e; &e; &e;</ent>
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:2: parser error : chunk is not well balanced
|
|
||||||
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
||||||
<ent>&e; &e; &e; &e;</ent>
|
<ent>&e; &e; &e; &e;</ent>
|
||||||
^
|
^
|
||||||
test/errors/rec_ext.ent:2: parser error : chunk is not well balanced
|
|
||||||
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
||||||
<ent>&e; &e; &e; &e;</ent>
|
<ent>&e; &e; &e; &e;</ent>
|
||||||
^
|
^
|
||||||
test/errors/rec_ext.ent:2: parser error : chunk is not well balanced
|
|
||||||
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
||||||
<ent>&e; &e; &e; &e;</ent>
|
<ent>&e; &e; &e; &e;</ent>
|
||||||
^
|
^
|
||||||
test/errors/rec_ext.ent:2: parser error : chunk is not well balanced
|
|
||||||
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
||||||
<ent>&e; &e; &e; &e;</ent>
|
<ent>&e; &e; &e; &e;</ent>
|
||||||
^
|
^
|
||||||
test/errors/rec_ext.ent:2: parser error : chunk is not well balanced
|
|
||||||
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
||||||
<ent>&e; &e; &e; &e;</ent>
|
<ent>&e; &e; &e; &e;</ent>
|
||||||
^
|
^
|
||||||
test/errors/rec_ext.ent:2: parser error : chunk is not well balanced
|
|
||||||
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
||||||
<ent>&e; &e; &e; &e;</ent>
|
<ent>&e; &e; &e; &e;</ent>
|
||||||
^
|
^
|
||||||
test/errors/rec_ext.ent:2: parser error : chunk is not well balanced
|
|
||||||
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
||||||
<ent>&e; &e; &e; &e;</ent>
|
<ent>&e; &e; &e; &e;</ent>
|
||||||
^
|
^
|
||||||
test/errors/rec_ext.ent:2: parser error : chunk is not well balanced
|
|
||||||
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
||||||
<ent>&e; &e; &e; &e;</ent>
|
<ent>&e; &e; &e; &e;</ent>
|
||||||
^
|
^
|
||||||
test/errors/rec_ext.ent:2: parser error : chunk is not well balanced
|
|
||||||
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
||||||
<ent>&e; &e; &e; &e;</ent>
|
<ent>&e; &e; &e; &e;</ent>
|
||||||
^
|
^
|
||||||
test/errors/rec_ext.ent:2: parser error : chunk is not well balanced
|
|
||||||
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
||||||
<ent>&e; &e; &e; &e;</ent>
|
<ent>&e; &e; &e; &e;</ent>
|
||||||
^
|
^
|
||||||
test/errors/rec_ext.ent:2: parser error : chunk is not well balanced
|
|
||||||
|
|
||||||
^
|
|
||||||
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
||||||
<ent>&e; &e; &e; &e;</ent>
|
<ent>&e; &e; &e; &e;</ent>
|
||||||
^
|
^
|
||||||
test/errors/rec_ext.ent:2: parser error : chunk is not well balanced
|
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
||||||
|
<ent>&e; &e; &e; &e;</ent>
|
||||||
^
|
^
|
||||||
./test/errors/rec_ext_ent.xml:4: parser error : Entity 'e' failed to parse
|
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
||||||
|
<ent>&e; &e; &e; &e;</ent>
|
||||||
|
^
|
||||||
|
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
||||||
|
<ent>&e; &e; &e; &e;</ent>
|
||||||
|
^
|
||||||
|
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
||||||
|
<ent>&e; &e; &e; &e;</ent>
|
||||||
|
^
|
||||||
|
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
||||||
|
<ent>&e; &e; &e; &e;</ent>
|
||||||
|
^
|
||||||
|
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
||||||
|
<ent>&e; &e; &e; &e;</ent>
|
||||||
|
^
|
||||||
|
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
||||||
|
<ent>&e; &e; &e; &e;</ent>
|
||||||
|
^
|
||||||
|
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
||||||
|
<ent>&e; &e; &e; &e;</ent>
|
||||||
|
^
|
||||||
|
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
||||||
|
<ent>&e; &e; &e; &e;</ent>
|
||||||
|
^
|
||||||
|
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
||||||
|
<ent>&e; &e; &e; &e;</ent>
|
||||||
|
^
|
||||||
|
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
||||||
|
<ent>&e; &e; &e; &e;</ent>
|
||||||
|
^
|
||||||
|
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
||||||
|
<ent>&e; &e; &e; &e;</ent>
|
||||||
|
^
|
||||||
|
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
||||||
|
<ent>&e; &e; &e; &e;</ent>
|
||||||
|
^
|
||||||
|
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
||||||
|
<ent>&e; &e; &e; &e;</ent>
|
||||||
|
^
|
||||||
|
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
||||||
|
<ent>&e; &e; &e; &e;</ent>
|
||||||
|
^
|
||||||
|
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
||||||
|
<ent>&e; &e; &e; &e;</ent>
|
||||||
|
^
|
||||||
|
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
||||||
|
<ent>&e; &e; &e; &e;</ent>
|
||||||
|
^
|
||||||
|
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
||||||
|
<ent>&e; &e; &e; &e;</ent>
|
||||||
|
^
|
||||||
|
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
||||||
|
<ent>&e; &e; &e; &e;</ent>
|
||||||
|
^
|
||||||
|
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
||||||
|
<ent>&e; &e; &e; &e;</ent>
|
||||||
|
^
|
||||||
|
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
||||||
|
<ent>&e; &e; &e; &e;</ent>
|
||||||
|
^
|
||||||
|
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
||||||
|
<ent>&e; &e; &e; &e;</ent>
|
||||||
|
^
|
||||||
|
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
||||||
|
<ent>&e; &e; &e; &e;</ent>
|
||||||
|
^
|
||||||
|
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
||||||
|
<ent>&e; &e; &e; &e;</ent>
|
||||||
|
^
|
||||||
|
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
||||||
|
<ent>&e; &e; &e; &e;</ent>
|
||||||
|
^
|
||||||
|
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
||||||
|
<ent>&e; &e; &e; &e;</ent>
|
||||||
|
^
|
||||||
|
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
||||||
|
<ent>&e; &e; &e; &e;</ent>
|
||||||
|
^
|
||||||
|
test/errors/rec_ext.ent:1: parser error : Detected an entity reference loop
|
||||||
|
<ent>&e; &e; &e; &e;</ent>
|
||||||
|
^
|
||||||
|
./test/errors/rec_ext_ent.xml:4: parser error : Detected an entity reference loop
|
||||||
<doc>&e; &e; &e; &e;</doc>
|
<doc>&e; &e; &e; &e;</doc>
|
||||||
^
|
^
|
||||||
|
Loading…
Reference in New Issue
Block a user