1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
|
diff -urN XML-Atom-0.38/lib/XML/Atom/Client.pm XML-Atom-0.39/lib/XML/Atom/Client.pm
--- XML-Atom-0.38/lib/XML/Atom/Client.pm 2009-04-24 09:34:23.000000000 +0100
+++ XML-Atom-0.39/lib/XML/Atom/Client.pm 2011-06-08 21:18:10.000000000 +0100
@@ -188,7 +188,7 @@
if ($client->use_soap && (my $xml = $res->content)) {
my $doc;
if (LIBXML) {
- my $parser = XML::LibXML->new;
+ my $parser = $client->libxml_parser;
$doc = $parser->parse_string($xml);
} else {
my $xp = XML::XPath->new(xml => $xml);
@@ -218,6 +218,8 @@
}
}
+sub libxml_parser { XML::Atom->libxml_parser }
+
package LWP::UserAgent::AtomClient;
use strict;
use Scalar::Util;
diff -urN XML-Atom-0.38/lib/XML/Atom/Content.pm XML-Atom-0.39/lib/XML/Atom/Content.pm
--- XML-Atom-0.38/lib/XML/Atom/Content.pm 2011-05-23 03:54:10.000000000 +0100
+++ XML-Atom-0.39/lib/XML/Atom/Content.pm 2011-06-08 23:04:54.000000000 +0100
@@ -54,11 +54,12 @@
my $node;
eval {
if (LIBXML) {
- my $parser = XML::LibXML->new;
+ my $parser = XML::Atom->libxml_parser;
my $tree = $parser->parse_string($copy);
$node = $tree->getDocumentElement;
} else {
- my $xp = XML::XPath->new(xml => $copy);
+ my $parser = XML::Atom->expat_parser;
+ my $xp = XML::XPath->new(xml => $copy, parser => $parser);
$node = (($xp->find('/')->get_nodelist)[0]->getChildNodes)[0]
if $xp;
}
diff -urN XML-Atom-0.38/lib/XML/Atom/Server.pm XML-Atom-0.39/lib/XML/Atom/Server.pm
--- XML-Atom-0.38/lib/XML/Atom/Server.pm 2009-04-24 09:34:23.000000000 +0100
+++ XML-Atom-0.39/lib/XML/Atom/Server.pm 2011-06-08 21:18:10.000000000 +0100
@@ -284,7 +284,7 @@
my $server = shift;
unless (exists $server->{xml_body}) {
if (LIBXML) {
- my $parser = XML::LibXML->new;
+ my $parser = $server->libxml_parser;
$server->{xml_body} =
$parser->parse_string($server->request_content);
} else {
@@ -309,6 +309,8 @@
$atom;
}
+sub libxml_parser { XML::Atom->libxml_parser }
+
1;
__END__
diff -urN XML-Atom-0.38/lib/XML/Atom/Thing.pm XML-Atom-0.39/lib/XML/Atom/Thing.pm
--- XML-Atom-0.38/lib/XML/Atom/Thing.pm 2009-04-24 09:34:23.000000000 +0100
+++ XML-Atom-0.39/lib/XML/Atom/Thing.pm 2011-06-08 23:04:54.000000000 +0100
@@ -22,7 +22,7 @@
my $atom = shift;
my %param = @_ == 1 ? (Stream => $_[0]) : @_;
if (my $stream = delete $param{Stream}) {
- my $parser = XML::LibXML->new;
+ my $parser = delete $param{Parser} || XML::Atom->libxml_parser;
my $doc;
if (ref($stream) eq 'SCALAR') {
$doc = $parser->parse_string($$stream);
@@ -50,13 +50,14 @@
my %param = @_ == 1 ? (Stream => $_[0]) : @_;
my $elem_name = $atom->element_name;
if (my $stream = delete $param{Stream}) {
+ my $parser = delete $param{Parser} || XML::Atom->expat_parser;
my $xp;
if (ref($stream) eq 'SCALAR') {
- $xp = XML::XPath->new(xml => $$stream);
+ $xp = XML::XPath->new(xml => $$stream, parser => $parser);
} elsif (ref($stream)) {
- $xp = XML::XPath->new(ioref => $stream);
+ $xp = XML::XPath->new(ioref => $stream, parser => $parser);
} else {
- $xp = XML::XPath->new(filename => $stream);
+ $xp = XML::XPath->new(filename => $stream, parser => $parser);
}
my $set = $xp->find('/' . $elem_name);
unless ($set && $set->size) {
diff -urN XML-Atom-0.38/lib/XML/Atom.pm XML-Atom-0.39/lib/XML/Atom.pm
--- XML-Atom-0.38/lib/XML/Atom.pm 2011-05-23 03:56:26.000000000 +0100
+++ XML-Atom-0.39/lib/XML/Atom.pm 2011-06-21 05:06:02.000000000 +0100
@@ -35,6 +35,26 @@
$XML::Atom::DefaultVersion = 0.3;
}
+sub libxml_parser {
+ ## uses old XML::LibXML < 1.70 interface for compat reasons
+ return XML::LibXML->new(
+ #no_network => 1, # v1.63+
+ expand_xinclude => 0,
+ expand_entities => 1,
+ load_ext_dtd => 0,
+ ext_ent_handler => sub { warn "External entities disabled."; '' },
+ );
+}
+
+sub expat_parser {
+ return XML::Parser->new(
+ Handlers => {
+ ExternEnt => sub { warn "External Entities disabled."; '' },
+ ExternEntFin => sub {},
+ },
+ );
+}
+
use base qw( XML::Atom::ErrorHandler Exporter );
package XML::Atom::Namespace;
|