$ cat a.xml
]>&xxe;
$ perl -MXML::LibXML::Reader -e'
my $reader = XML::LibXML::Reader->new(
location => $ARGV[0],
load_ext_dtd => 0,
expand_entities => 0,
);
while ($reader->read) {
printf("%d %d %s\n",
$reader->depth,
$reader->nodeType,
$reader->name,
);
}
' a.xml
0 10 foo
0 1 foo
1 5 xxe
0 15 foo
####
$ cat bad.xml
$ perl -MXML::LibXML::Reader -e'
exit 1 if !eval {
my $reader = XML::LibXML::Reader->new(
location => $ARGV[0],
load_ext_dtd => 0,
expand_entities => 0,
);
1 while $reader->read;
1
};
' bad.xml
$ if [ $? -eq 0 ]; then echo "well-formed" ; else echo "error" ; fi
error