summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changes14
-rw-r--r--LibXML.pm2
-rw-r--r--LibXML.pod2
-rw-r--r--LibXML.xs55
-rw-r--r--MANIFEST1
-rw-r--r--META.json6
-rw-r--r--META.yml4
-rw-r--r--Makefile.PL8
-rw-r--r--docs/libxml.dbk13
-rw-r--r--lib/XML/LibXML/Attr.pod2
-rw-r--r--lib/XML/LibXML/AttributeHash.pm2
-rw-r--r--lib/XML/LibXML/Boolean.pm2
-rw-r--r--lib/XML/LibXML/CDATASection.pod2
-rw-r--r--lib/XML/LibXML/Comment.pod2
-rw-r--r--lib/XML/LibXML/Common.pm2
-rw-r--r--lib/XML/LibXML/Common.pod2
-rw-r--r--lib/XML/LibXML/DOM.pod2
-rw-r--r--lib/XML/LibXML/Devel.pm2
-rw-r--r--lib/XML/LibXML/Document.pod7
-rw-r--r--lib/XML/LibXML/DocumentFragment.pod2
-rw-r--r--lib/XML/LibXML/Dtd.pod2
-rw-r--r--lib/XML/LibXML/Element.pod2
-rw-r--r--lib/XML/LibXML/ErrNo.pm2
-rw-r--r--lib/XML/LibXML/ErrNo.pod2
-rw-r--r--lib/XML/LibXML/Error.pm2
-rw-r--r--lib/XML/LibXML/Error.pod2
-rw-r--r--lib/XML/LibXML/InputCallback.pod2
-rw-r--r--lib/XML/LibXML/Literal.pm2
-rw-r--r--lib/XML/LibXML/Namespace.pod2
-rw-r--r--lib/XML/LibXML/Node.pod7
-rw-r--r--lib/XML/LibXML/NodeList.pm2
-rw-r--r--lib/XML/LibXML/Number.pm2
-rw-r--r--lib/XML/LibXML/PI.pod2
-rw-r--r--lib/XML/LibXML/Parser.pod2
-rw-r--r--lib/XML/LibXML/Pattern.pod2
-rw-r--r--lib/XML/LibXML/Reader.pm2
-rw-r--r--lib/XML/LibXML/Reader.pod2
-rw-r--r--lib/XML/LibXML/RegExp.pod2
-rw-r--r--lib/XML/LibXML/RelaxNG.pod2
-rw-r--r--lib/XML/LibXML/SAX.pm2
-rw-r--r--lib/XML/LibXML/SAX.pod2
-rw-r--r--lib/XML/LibXML/SAX/Builder.pm2
-rw-r--r--lib/XML/LibXML/SAX/Builder.pod2
-rw-r--r--lib/XML/LibXML/SAX/Generator.pm2
-rw-r--r--lib/XML/LibXML/SAX/Parser.pm2
-rw-r--r--lib/XML/LibXML/Schema.pod2
-rw-r--r--lib/XML/LibXML/Text.pod2
-rw-r--r--lib/XML/LibXML/XPathContext.pm2
-rw-r--r--lib/XML/LibXML/XPathContext.pod2
-rw-r--r--lib/XML/LibXML/XPathExpression.pod2
-rw-r--r--perl-libxml-mm.c1
-rw-r--r--t/35huge_mode.t37
-rwxr-xr-xt/namespace-magic-scalar-rt144415.t35
53 files changed, 166 insertions, 104 deletions
diff --git a/Changes b/Changes
index e00313e..8ac00f0 100644
--- a/Changes
+++ b/Changes
@@ -1,5 +1,19 @@
Revision history for Perl extension XML::LibXML
+2.0209 2023-07-15
+ - t/35huge_mode.t: fix test with libxml2 2.11
+ - thanks to Dominique Martinet
+ - Add clearer reference to using cloneNode to extract node with namespaces
+ - thanks to Timothy Legge
+ - initialize xmlValidCtxt
+ - thanks to Alexander Bluhm
+
+2.0208 2022-09-30
+ - Fix https://rt.cpan.org/Ticket/Display.html?id=144415
+ - Bug #144415 for XML-LibXML: createElementNS & setNamespace get
+ confused by Readonly scalars
+ - thanks to DAKKAR and haarg.
+
2.0207 2021-04-17
- Small cleanups:
- https://github.com/shlomif/perl-XML-LibXML/pull/63
diff --git a/LibXML.pm b/LibXML.pm
index 7f033ca..1356cf1 100644
--- a/LibXML.pm
+++ b/LibXML.pm
@@ -29,7 +29,7 @@ use XML::LibXML::XPathContext;
use IO::Handle; # for FH reads called as methods
BEGIN {
-$VERSION = "2.0207"; # VERSION TEMPLATE: DO NOT CHANGE
+$VERSION = "2.0209"; # VERSION TEMPLATE: DO NOT CHANGE
$ABI_VERSION = 2;
require Exporter;
use XSLoader ();
diff --git a/LibXML.pod b/LibXML.pod
index 73a9e50..d06fe37 100644
--- a/LibXML.pod
+++ b/LibXML.pod
@@ -507,7 +507,7 @@ Petr Pajas
=head1 VERSION
-2.0207
+2.0209
=head1 COPYRIGHT
diff --git a/LibXML.xs b/LibXML.xs
index 51bb3be..b5b0b95 100644
--- a/LibXML.xs
+++ b/LibXML.xs
@@ -4025,18 +4025,11 @@ is_valid(self, ...)
CODE:
INIT_ERROR_HANDLER;
+ memset(&cvp, 0, sizeof(cvp));
cvp.userData = saved_error;
cvp.error = (xmlValidityErrorFunc)LibXML_validity_error_ctx;
cvp.warning = (xmlValidityWarningFunc)LibXML_validity_warning_ctx;
- /* we need to initialize the node stack, because perl might
- * already have messed it up.
- */
- cvp.nodeNr = 0;
- cvp.nodeTab = NULL;
- cvp.vstateNr = 0;
- cvp.vstateTab = NULL;
-
PmmClearPSVI(self);
PmmInvalidatePSVI(self);
if (items > 1) {
@@ -4065,16 +4058,10 @@ validate(self, ...)
CODE:
INIT_ERROR_HANDLER;
+ memset(&cvp, 0, sizeof(cvp));
cvp.userData = saved_error;
cvp.error = (xmlValidityErrorFunc)LibXML_validity_error_ctx;
cvp.warning = (xmlValidityWarningFunc)LibXML_validity_warning_ctx;
- /* we need to initialize the node stack, because perl might
- * already have messed it up.
- */
- cvp.nodeNr = 0;
- cvp.nodeTab = NULL;
- cvp.vstateNr = 0;
- cvp.vstateTab = NULL;
PmmClearPSVI(self);
PmmInvalidatePSVI(self);
@@ -5747,7 +5734,7 @@ _setNamespace(self, namespaceURI, namespacePrefix = &PL_sv_undef, flag = 1 )
CODE:
/* if ( !nsURI ){
XSRETURN_UNDEF;
- } */
+ } */
nsPrefix = nodeSv2C(namespacePrefix, node);
if ( xmlStrlen( nsPrefix ) == 0 ) {
@@ -5759,22 +5746,22 @@ _setNamespace(self, namespaceURI, namespacePrefix = &PL_sv_undef, flag = 1 )
nsURI = NULL;
}
if ( nsPrefix == NULL && nsURI == NULL ) {
- /* special case: empty namespace */
- if ( (ns = xmlSearchNs(node->doc, node, NULL)) &&
- ( ns->href && xmlStrlen( ns->href ) != 0 ) ) {
- /* won't take it */
- RETVAL = 0;
- } else if ( flag ) {
- /* no namespace */
- xmlSetNs(node, NULL);
- RETVAL = 1;
- } else {
- RETVAL = 0;
- }
- }
+ /* special case: empty namespace */
+ if ( (ns = xmlSearchNs(node->doc, node, NULL)) &&
+ ( ns->href && xmlStrlen( ns->href ) != 0 ) ) {
+ /* won't take it */
+ RETVAL = 0;
+ } else if ( flag ) {
+ /* no namespace */
+ xmlSetNs(node, NULL);
+ RETVAL = 1;
+ } else {
+ RETVAL = 0;
+ }
+ }
else if ( flag && (ns = xmlSearchNs(node->doc, node, nsPrefix)) ) {
- /* user just wants to set the namespace for the node */
- /* try to reuse an existing declaration for the prefix */
+ /* user just wants to set the namespace for the node */
+ /* try to reuse an existing declaration for the prefix */
if ( xmlStrEqual( ns->href, nsURI ) ) {
RETVAL = 1;
}
@@ -5786,9 +5773,9 @@ _setNamespace(self, namespaceURI, namespacePrefix = &PL_sv_undef, flag = 1 )
}
}
else if ( (ns = xmlNewNs( node, nsURI, nsPrefix )) )
- RETVAL = 1;
- else
- RETVAL = 0;
+ RETVAL = 1;
+ else
+ RETVAL = 0;
if ( flag && ns ) {
xmlSetNs(node, ns);
diff --git a/MANIFEST b/MANIFEST
index 4297696..96cf979 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -193,6 +193,7 @@ t/lib/Collector.pm
t/lib/Counter.pm
t/lib/Stacker.pm
t/lib/TestHelpers.pm
+t/namespace-magic-scalar-rt144415.t
t/pod-files-presence.t
t/pod.t
t/release-kwalitee.t
diff --git a/META.json b/META.json
index 2bfa259..e427687 100644
--- a/META.json
+++ b/META.json
@@ -4,7 +4,7 @@
"Petr Pajas <PAJAS@cpan.org>"
],
"dynamic_config" : 0,
- "generated_by" : "ExtUtils::MakeMaker version 7.60, CPAN::Meta::Converter version 2.150010",
+ "generated_by" : "ExtUtils::MakeMaker version 7.70, CPAN::Meta::Converter version 2.150010",
"keywords" : [
"dom",
"html",
@@ -97,6 +97,6 @@
"web" : "https://github.com/shlomif/perl-XML-LibXML"
}
},
- "version" : "2.0207",
- "x_serialization_backend" : "JSON::PP version 4.06"
+ "version" : "2.0209",
+ "x_serialization_backend" : "JSON::PP version 4.16"
}
diff --git a/META.yml b/META.yml
index fee45e0..ed2886c 100644
--- a/META.yml
+++ b/META.yml
@@ -19,7 +19,7 @@ configure_requires:
Config: '0'
ExtUtils::MakeMaker: '0'
dynamic_config: 0
-generated_by: 'ExtUtils::MakeMaker version 7.60, CPAN::Meta::Converter version 2.150010'
+generated_by: 'ExtUtils::MakeMaker version 7.70, CPAN::Meta::Converter version 2.150010'
keywords:
- dom
- html
@@ -69,5 +69,5 @@ requires:
warnings: '0'
resources:
repository: https://github.com/shlomif/perl-XML-LibXML.git
-version: '2.0207'
+version: '2.0209'
x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
diff --git a/Makefile.PL b/Makefile.PL
index 3d1902e..98f8cc1 100644
--- a/Makefile.PL
+++ b/Makefile.PL
@@ -68,11 +68,15 @@ my %prereqs = (
"warnings" => 0,
);
-my %xsbuild = (
+my %xsbuild_concat = (
DEFINE => '-DHAVE_UTF8',
OBJECT => '$(O_FILES)',
- Alien::Base::Wrapper->mm_args,
);
+my %xsbuild = Alien::Base::Wrapper->mm_args; # Might contain a definition of DEFINE, must thus concatenate.
+while (my ($k, $v) = each %xsbuild_concat) {
+ my $base_val = $xsbuild{$k};
+ $xsbuild{$k} = (defined($base_val) ? ($base_val . ' ' . $v) : $v);
+}
my %WriteMakefileArgs = (
"NAME" => "XML::LibXML",
diff --git a/docs/libxml.dbk b/docs/libxml.dbk
index c7a4208..371c5c0 100644
--- a/docs/libxml.dbk
+++ b/docs/libxml.dbk
@@ -22,7 +22,7 @@
</authorgroup>
- <edition>2.0207</edition>
+ <edition>2.0209</edition>
<copyright>
<year>2001-2007</year>
<holder>AxKit.com Ltd</holder>
@@ -2598,7 +2598,9 @@ print {$out_fh} $doc-&gt;toString;</programlisting>
</funcsynopsis>
<para><emphasis>toStringHTML</emphasis> serialize the tree to a byte string in the document encoding as HTML. With this method indenting is automatic and managed by
- libxml2 internally.</para>
+ libxml2 internally. Note the string must contain
+ &lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"&gt; (rather than the newer &lt;meta charset="utf-8"&gt;),
+ else all non-ASCII will become entities.</para>
</listitem>
</varlistentry>
@@ -3396,6 +3398,13 @@ my $dtd = $document-&gt;createInternalSubset( "foo", "-//FOO//DTD FOO 0.1//
has changed in 1.62 in order to be consistent with the DOM spec
(in older versions attributes and namespace information
was not copied for elements).</para>
+ <para><emphasis>NOTE</emphasis>cloneNode creates
+ a copy of the selected node that includes the parent's
+ defined <emphasis>namespaces</emphasis> that are in
+ use by the node (or its children) being cloned. That
+ makes it useful for extracting a fragment of xml that
+ can be used as a valid xml document.
+ </para>
</listitem>
</varlistentry>
diff --git a/lib/XML/LibXML/Attr.pod b/lib/XML/LibXML/Attr.pod
index fa6a5cd..94bd691 100644
--- a/lib/XML/LibXML/Attr.pod
+++ b/lib/XML/LibXML/Attr.pod
@@ -121,7 +121,7 @@ Petr Pajas
=head1 VERSION
-2.0207
+2.0209
=head1 COPYRIGHT
diff --git a/lib/XML/LibXML/AttributeHash.pm b/lib/XML/LibXML/AttributeHash.pm
index c83f0dc..87ca8bd 100644
--- a/lib/XML/LibXML/AttributeHash.pm
+++ b/lib/XML/LibXML/AttributeHash.pm
@@ -7,7 +7,7 @@ use Tie::Hash;
our @ISA = qw/Tie::Hash/;
use vars qw($VERSION);
-$VERSION = "2.0207"; # VERSION TEMPLATE: DO NOT CHANGE
+$VERSION = "2.0209"; # VERSION TEMPLATE: DO NOT CHANGE
BEGIN
{
diff --git a/lib/XML/LibXML/Boolean.pm b/lib/XML/LibXML/Boolean.pm
index faa53b7..7e3da31 100644
--- a/lib/XML/LibXML/Boolean.pm
+++ b/lib/XML/LibXML/Boolean.pm
@@ -16,7 +16,7 @@ use warnings;
use vars qw ($VERSION);
-$VERSION = "2.0207"; # VERSION TEMPLATE: DO NOT CHANGE
+$VERSION = "2.0209"; # VERSION TEMPLATE: DO NOT CHANGE
use overload
'""' => \&value,
diff --git a/lib/XML/LibXML/CDATASection.pod b/lib/XML/LibXML/CDATASection.pod
index 1113e56..996e025 100644
--- a/lib/XML/LibXML/CDATASection.pod
+++ b/lib/XML/LibXML/CDATASection.pod
@@ -45,7 +45,7 @@ Petr Pajas
=head1 VERSION
-2.0207
+2.0209
=head1 COPYRIGHT
diff --git a/lib/XML/LibXML/Comment.pod b/lib/XML/LibXML/Comment.pod
index aaacdce..9ae60a2 100644
--- a/lib/XML/LibXML/Comment.pod
+++ b/lib/XML/LibXML/Comment.pod
@@ -46,7 +46,7 @@ Petr Pajas
=head1 VERSION
-2.0207
+2.0209
=head1 COPYRIGHT
diff --git a/lib/XML/LibXML/Common.pm b/lib/XML/LibXML/Common.pm
index eb7681c..e478972 100644
--- a/lib/XML/LibXML/Common.pm
+++ b/lib/XML/LibXML/Common.pm
@@ -23,7 +23,7 @@ use vars qw( @ISA $VERSION @EXPORT @EXPORT_OK %EXPORT_TAGS);
@ISA = qw(Exporter);
-$VERSION = "2.0207"; # VERSION TEMPLATE: DO NOT CHANGE
+$VERSION = "2.0209"; # VERSION TEMPLATE: DO NOT CHANGE
use XML::LibXML qw(:libxml);
diff --git a/lib/XML/LibXML/Common.pod b/lib/XML/LibXML/Common.pod
index 9423109..d17ffab 100644
--- a/lib/XML/LibXML/Common.pod
+++ b/lib/XML/LibXML/Common.pod
@@ -116,7 +116,7 @@ Petr Pajas
=head1 VERSION
-2.0207
+2.0209
=head1 COPYRIGHT
diff --git a/lib/XML/LibXML/DOM.pod b/lib/XML/LibXML/DOM.pod
index d01e75a..08fef1c 100644
--- a/lib/XML/LibXML/DOM.pod
+++ b/lib/XML/LibXML/DOM.pod
@@ -129,7 +129,7 @@ Petr Pajas
=head1 VERSION
-2.0207
+2.0209
=head1 COPYRIGHT
diff --git a/lib/XML/LibXML/Devel.pm b/lib/XML/LibXML/Devel.pm
index 8f13912..7297bed 100644
--- a/lib/XML/LibXML/Devel.pm
+++ b/lib/XML/LibXML/Devel.pm
@@ -12,7 +12,7 @@ use warnings;
use XML::LibXML;
use vars qw ($VERSION);
-$VERSION = "2.0207"; # VERSION TEMPLATE: DO NOT CHANGE
+$VERSION = "2.0209"; # VERSION TEMPLATE: DO NOT CHANGE
use 5.008_000;
diff --git a/lib/XML/LibXML/Document.pod b/lib/XML/LibXML/Document.pod
index 2cdc576..f433f9b 100644
--- a/lib/XML/LibXML/Document.pod
+++ b/lib/XML/LibXML/Document.pod
@@ -325,7 +325,10 @@ The format parameter has the same behaviour as in toString().
$str = $document->toStringHTML();
I<<<<<< toStringHTML >>>>>> serialize the tree to a byte string in the document encoding as HTML. With this
-method indenting is automatic and managed by libxml2 internally.
+method indenting is automatic and managed by libxml2 internally. Note the
+string must contain <meta http-equiv="Content-Type" content="text/html;
+charset=utf-8"> (rather than the newer <meta charset="utf-8">), else all
+non-ASCII will become entities.
=item serialize_html
@@ -683,7 +686,7 @@ Petr Pajas
=head1 VERSION
-2.0207
+2.0209
=head1 COPYRIGHT
diff --git a/lib/XML/LibXML/DocumentFragment.pod b/lib/XML/LibXML/DocumentFragment.pod
index 61e741c..b015d05 100644
--- a/lib/XML/LibXML/DocumentFragment.pod
+++ b/lib/XML/LibXML/DocumentFragment.pod
@@ -27,7 +27,7 @@ Petr Pajas
=head1 VERSION
-2.0207
+2.0209
=head1 COPYRIGHT
diff --git a/lib/XML/LibXML/Dtd.pod b/lib/XML/LibXML/Dtd.pod
index 294cb17..f82dd86 100644
--- a/lib/XML/LibXML/Dtd.pod
+++ b/lib/XML/LibXML/Dtd.pod
@@ -89,7 +89,7 @@ Petr Pajas
=head1 VERSION
-2.0207
+2.0209
=head1 COPYRIGHT
diff --git a/lib/XML/LibXML/Element.pod b/lib/XML/LibXML/Element.pod
index f6f0b74..044bd90 100644
--- a/lib/XML/LibXML/Element.pod
+++ b/lib/XML/LibXML/Element.pod
@@ -382,7 +382,7 @@ Petr Pajas
=head1 VERSION
-2.0207
+2.0209
=head1 COPYRIGHT
diff --git a/lib/XML/LibXML/ErrNo.pm b/lib/XML/LibXML/ErrNo.pm
index 0fa6308..9a8450b 100644
--- a/lib/XML/LibXML/ErrNo.pm
+++ b/lib/XML/LibXML/ErrNo.pm
@@ -14,7 +14,7 @@ use strict;
use warnings;
use vars qw($VERSION);
-$VERSION = "2.0207"; # VERSION TEMPLATE: DO NOT CHANGE
+$VERSION = "2.0209"; # VERSION TEMPLATE: DO NOT CHANGE
use constant ERR_OK => 0;
use constant ERR_INTERNAL_ERROR => 1;
diff --git a/lib/XML/LibXML/ErrNo.pod b/lib/XML/LibXML/ErrNo.pod
index 4b1b59e..a32ce63 100644
--- a/lib/XML/LibXML/ErrNo.pod
+++ b/lib/XML/LibXML/ErrNo.pod
@@ -17,7 +17,7 @@ Petr Pajas
=head1 VERSION
-2.0207
+2.0209
=head1 COPYRIGHT
diff --git a/lib/XML/LibXML/Error.pm b/lib/XML/LibXML/Error.pm
index 9855eaf..ebf1641 100644
--- a/lib/XML/LibXML/Error.pm
+++ b/lib/XML/LibXML/Error.pm
@@ -28,7 +28,7 @@ use overload
fallback => 1;
$WARNINGS = 0; # 0: suppress, 1: report via warn, 2: report via die
-$VERSION = "2.0207"; # VERSION TEMPLATE: DO NOT CHANGE
+$VERSION = "2.0209"; # VERSION TEMPLATE: DO NOT CHANGE
use constant XML_ERR_NONE => 0;
use constant XML_ERR_WARNING => 1; # A simple warning
diff --git a/lib/XML/LibXML/Error.pod b/lib/XML/LibXML/Error.pod
index b8915e3..4896be8 100644
--- a/lib/XML/LibXML/Error.pod
+++ b/lib/XML/LibXML/Error.pod
@@ -244,7 +244,7 @@ Petr Pajas
=head1 VERSION
-2.0207
+2.0209
=head1 COPYRIGHT
diff --git a/lib/XML/LibXML/InputCallback.pod b/lib/XML/LibXML/InputCallback.pod
index 3cfcd15..79ebdd8 100644
--- a/lib/XML/LibXML/InputCallback.pod
+++ b/lib/XML/LibXML/InputCallback.pod
@@ -280,7 +280,7 @@ Petr Pajas
=head1 VERSION
-2.0207
+2.0209
=head1 COPYRIGHT
diff --git a/lib/XML/LibXML/Literal.pm b/lib/XML/LibXML/Literal.pm
index 1bc9fa1..06b42b5 100644
--- a/lib/XML/LibXML/Literal.pm
+++ b/lib/XML/LibXML/Literal.pm
@@ -16,7 +16,7 @@ use strict;
use warnings;
use vars qw ($VERSION);
-$VERSION = "2.0207"; # VERSION TEMPLATE: DO NOT CHANGE
+$VERSION = "2.0209"; # VERSION TEMPLATE: DO NOT CHANGE
use overload
'""' => \&value,
diff --git a/lib/XML/LibXML/Namespace.pod b/lib/XML/LibXML/Namespace.pod
index 85d5598..26c2200 100644
--- a/lib/XML/LibXML/Namespace.pod
+++ b/lib/XML/LibXML/Namespace.pod
@@ -141,7 +141,7 @@ Petr Pajas
=head1 VERSION
-2.0207
+2.0209
=head1 COPYRIGHT
diff --git a/lib/XML/LibXML/Node.pod b/lib/XML/LibXML/Node.pod
index 6f8e9a5..74cda2c 100644
--- a/lib/XML/LibXML/Node.pod
+++ b/lib/XML/LibXML/Node.pod
@@ -279,6 +279,11 @@ Note that the behavior of this function for $deep=0 has changed in 1.62 in
order to be consistent with the DOM spec (in older versions attributes and
namespace information was not copied for elements).
+I<<<<<< NOTE >>>>>>cloneNode creates a copy of the selected node that includes the parent's
+defined I<<<<<< namespaces >>>>>> that are in use by the node (or its children) being cloned. That makes it
+useful for extracting a fragment of xml that can be used as a valid xml
+document.
+
=item parentNode
@@ -763,7 +768,7 @@ Petr Pajas
=head1 VERSION
-2.0207
+2.0209
=head1 COPYRIGHT
diff --git a/lib/XML/LibXML/NodeList.pm b/lib/XML/LibXML/NodeList.pm
index ca748d9..8bd58cf 100644
--- a/lib/XML/LibXML/NodeList.pm
+++ b/lib/XML/LibXML/NodeList.pm
@@ -17,7 +17,7 @@ use XML::LibXML::Literal;
use XML::LibXML::Number;
use vars qw($VERSION);
-$VERSION = "2.0207"; # VERSION TEMPLATE: DO NOT CHANGE
+$VERSION = "2.0209"; # VERSION TEMPLATE: DO NOT CHANGE
use overload
'""' => \&to_literal,
diff --git a/lib/XML/LibXML/Number.pm b/lib/XML/LibXML/Number.pm
index cddd4c0..feb3d39 100644
--- a/lib/XML/LibXML/Number.pm
+++ b/lib/XML/LibXML/Number.pm
@@ -14,7 +14,7 @@ use strict;
use warnings;
use vars qw ($VERSION);
-$VERSION = "2.0207"; # VERSION TEMPLATE: DO NOT CHANGE
+$VERSION = "2.0209"; # VERSION TEMPLATE: DO NOT CHANGE
use overload
'""' => \&value,
diff --git a/lib/XML/LibXML/PI.pod b/lib/XML/LibXML/PI.pod
index 99323ff..22502c7 100644
--- a/lib/XML/LibXML/PI.pod
+++ b/lib/XML/LibXML/PI.pod
@@ -74,7 +74,7 @@ Petr Pajas
=head1 VERSION
-2.0207
+2.0209
=head1 COPYRIGHT
diff --git a/lib/XML/LibXML/Parser.pod b/lib/XML/LibXML/Parser.pod
index 034395d..c46cd11 100644
--- a/lib/XML/LibXML/Parser.pod
+++ b/lib/XML/LibXML/Parser.pod
@@ -988,7 +988,7 @@ Petr Pajas
=head1 VERSION
-2.0207
+2.0209
=head1 COPYRIGHT
diff --git a/lib/XML/LibXML/Pattern.pod b/lib/XML/LibXML/Pattern.pod
index 3cf4d72..4317098 100644
--- a/lib/XML/LibXML/Pattern.pod
+++ b/lib/XML/LibXML/Pattern.pod
@@ -94,7 +94,7 @@ Petr Pajas
=head1 VERSION
-2.0207
+2.0209
=head1 COPYRIGHT
diff --git a/lib/XML/LibXML/Reader.pm b/lib/XML/LibXML/Reader.pm
index 40f093c..8752737 100644
--- a/lib/XML/LibXML/Reader.pm
+++ b/lib/XML/LibXML/Reader.pm
@@ -14,7 +14,7 @@ use strict;
use warnings;
use vars qw ($VERSION);
-$VERSION = "2.0207"; # VERSION TEMPLATE: DO NOT CHANGE
+$VERSION = "2.0209"; # VERSION TEMPLATE: DO NOT CHANGE
use 5.008_000;
diff --git a/lib/XML/LibXML/Reader.pod b/lib/XML/LibXML/Reader.pod
index 094e852..234787a 100644
--- a/lib/XML/LibXML/Reader.pod
+++ b/lib/XML/LibXML/Reader.pod
@@ -657,7 +657,7 @@ Petr Pajas
=head1 VERSION
-2.0207
+2.0209
=head1 COPYRIGHT
diff --git a/lib/XML/LibXML/RegExp.pod b/lib/XML/LibXML/RegExp.pod
index 0ef9b6e..817aaeb 100644
--- a/lib/XML/LibXML/RegExp.pod
+++ b/lib/XML/LibXML/RegExp.pod
@@ -58,7 +58,7 @@ Petr Pajas
=head1 VERSION
-2.0207
+2.0209
=head1 COPYRIGHT
diff --git a/lib/XML/LibXML/RelaxNG.pod b/lib/XML/LibXML/RelaxNG.pod
index a05d583..dbeccd4 100644
--- a/lib/XML/LibXML/RelaxNG.pod
+++ b/lib/XML/LibXML/RelaxNG.pod
@@ -73,7 +73,7 @@ Petr Pajas
=head1 VERSION
-2.0207
+2.0209
=head1 COPYRIGHT
diff --git a/lib/XML/LibXML/SAX.pm b/lib/XML/LibXML/SAX.pm
index 681499e..deff54d 100644
--- a/lib/XML/LibXML/SAX.pm
+++ b/lib/XML/LibXML/SAX.pm
@@ -14,7 +14,7 @@ use warnings;
use vars qw($VERSION @ISA);
-$VERSION = "2.0207"; # VERSION TEMPLATE: DO NOT CHANGE
+$VERSION = "2.0209"; # VERSION TEMPLATE: DO NOT CHANGE
use XML::LibXML;
use XML::SAX::Base;
diff --git a/lib/XML/LibXML/SAX.pod b/lib/XML/LibXML/SAX.pod
index dc736f7..cff0763 100644
--- a/lib/XML/LibXML/SAX.pod
+++ b/lib/XML/LibXML/SAX.pod
@@ -47,7 +47,7 @@ Petr Pajas
=head1 VERSION
-2.0207
+2.0209
=head1 COPYRIGHT
diff --git a/lib/XML/LibXML/SAX/Builder.pm b/lib/XML/LibXML/SAX/Builder.pm
index c16ee87..f7709eb 100644
--- a/lib/XML/LibXML/SAX/Builder.pm
+++ b/lib/XML/LibXML/SAX/Builder.pm
@@ -21,7 +21,7 @@ sub CLONE_SKIP {
return $XML::LibXML::__threads_shared ? 0 : 1;
}
-$VERSION = "2.0207"; # VERSION TEMPLATE: DO NOT CHANGE
+$VERSION = "2.0209"; # VERSION TEMPLATE: DO NOT CHANGE
sub new {
my $class = shift;
diff --git a/lib/XML/LibXML/SAX/Builder.pod b/lib/XML/LibXML/SAX/Builder.pod
index c199c2f..c35e493 100644
--- a/lib/XML/LibXML/SAX/Builder.pod
+++ b/lib/XML/LibXML/SAX/Builder.pod
@@ -38,7 +38,7 @@ Petr Pajas
=head1 VERSION
-2.0207
+2.0209
=head1 COPYRIGHT
diff --git a/lib/XML/LibXML/SAX/Generator.pm b/lib/XML/LibXML/SAX/Generator.pm
index 2ae881f..0680516 100644
--- a/lib/XML/LibXML/SAX/Generator.pm
+++ b/lib/XML/LibXML/SAX/Generator.pm
@@ -15,7 +15,7 @@ use warnings;
use XML::LibXML;
use vars qw ($VERSION);
-$VERSION = "2.0207"; # VERSION TEMPLATE: DO NOT CHANGE
+$VERSION = "2.0209"; # VERSION TEMPLATE: DO NOT CHANGE
sub CLONE_SKIP {
return $XML::LibXML::__threads_shared ? 0 : 1;
diff --git a/lib/XML/LibXML/SAX/Parser.pm b/lib/XML/LibXML/SAX/Parser.pm
index 0b2ba85..d4c4abc 100644
--- a/lib/XML/LibXML/SAX/Parser.pm
+++ b/lib/XML/LibXML/SAX/Parser.pm
@@ -18,7 +18,7 @@ use XML::LibXML::Common qw(:libxml);
use XML::SAX::Base;
use XML::SAX::DocumentLocator;
-$VERSION = "2.0207"; # VERSION TEMPLATE: DO NOT CHANGE
+$VERSION = "2.0209"; # VERSION TEMPLATE: DO NOT CHANGE
@ISA = ('XML::SAX::Base');
sub CLONE_SKIP {
diff --git a/lib/XML/LibXML/Schema.pod b/lib/XML/LibXML/Schema.pod
index 5bfc958..020552f 100644
--- a/lib/XML/LibXML/Schema.pod
+++ b/lib/XML/LibXML/Schema.pod
@@ -69,7 +69,7 @@ Petr Pajas
=head1 VERSION
-2.0207
+2.0209
=head1 COPYRIGHT
diff --git a/lib/XML/LibXML/Text.pod b/lib/XML/LibXML/Text.pod
index be65280..53099da 100644
--- a/lib/XML/LibXML/Text.pod
+++ b/lib/XML/LibXML/Text.pod
@@ -170,7 +170,7 @@ Petr Pajas
=head1 VERSION
-2.0207
+2.0209
=head1 COPYRIGHT
diff --git a/lib/XML/LibXML/XPathContext.pm b/lib/XML/LibXML/XPathContext.pm
index 10e62ed..7085cfa 100644
--- a/lib/XML/LibXML/XPathContext.pm
+++ b/lib/XML/LibXML/XPathContext.pm
@@ -17,7 +17,7 @@ use Carp;
use XML::LibXML;
use XML::LibXML::NodeList;
-$VERSION = "2.0207"; # VERSION TEMPLATE: DO NOT CHANGE
+$VERSION = "2.0209"; # VERSION TEMPLATE: DO NOT CHANGE
# should LibXML XPath data types be used for simple objects
# when passing parameters to extension functions (default: no)
diff --git a/lib/XML/LibXML/XPathContext.pod b/lib/XML/LibXML/XPathContext.pod
index 0b8f81c..10e84b4 100644
--- a/lib/XML/LibXML/XPathContext.pod
+++ b/lib/XML/LibXML/XPathContext.pod
@@ -362,7 +362,7 @@ Petr Pajas
=head1 VERSION
-2.0207
+2.0209
=head1 COPYRIGHT
diff --git a/lib/XML/LibXML/XPathExpression.pod b/lib/XML/LibXML/XPathExpression.pod
index 5ff7b0d..3cd91ed 100644
--- a/lib/XML/LibXML/XPathExpression.pod
+++ b/lib/XML/LibXML/XPathExpression.pod
@@ -52,7 +52,7 @@ Petr Pajas
=head1 VERSION
-2.0207
+2.0209
=head1 COPYRIGHT
diff --git a/perl-libxml-mm.c b/perl-libxml-mm.c
index b433c5c..a3e78a2 100644
--- a/perl-libxml-mm.c
+++ b/perl-libxml-mm.c
@@ -1118,6 +1118,7 @@ Sv2C( SV* scalar, const xmlChar *encoding )
dTHX;
xs_warn("SV2C: start!\n");
+ SvGETMAGIC(scalar);
if ( scalar != NULL && SvOK(scalar) ) {
STRLEN len = 0;
char * t_pv =SvPV(scalar, len);
diff --git a/t/35huge_mode.t b/t/35huge_mode.t
index 1ccb334..059d781 100644
--- a/t/35huge_mode.t
+++ b/t/35huge_mode.t
@@ -29,23 +29,22 @@ my $benign_xml = <<'EOF';
EOF
my $evil_xml = <<'EOF';
-<?xml version="1.0"?>
-<!DOCTYPE lolz [
- <!ENTITY lol "lol">
- <!ENTITY lol1 "&lol;&lol;">
- <!ENTITY lol2 "&lol1;&lol1;">
- <!ENTITY lol3 "&lol2;&lol2;">
- <!ENTITY lol4 "&lol3;&lol3;">
- <!ENTITY lol5 "&lol4;&lol4;">
- <!ENTITY lol6 "&lol5;&lol5;">
- <!ENTITY lol7 "&lol6;&lol6;">
- <!ENTITY lol8 "&lol7;&lol7;">
- <!ENTITY lol9 "&lol8;&lol8;">
+<!DOCTYPE root [
+ <!ENTITY ha "Ha !">
+ <!ENTITY ha2 "&ha; &ha;">
+EOF
+
+foreach my $i (2 .. 47)
+{
+ $evil_xml .= sprintf(qq# <!ENTITY ha%d "&ha%d; &ha%d;">\n#, $i+1, $i, $i);
+}
+
+$evil_xml .= <<'EOF';
]>
-<lolz>&lol9;</lolz>
+<root>&ha48;</root>
EOF
-my($parser, $doc);
+my ($parser, $doc, $err);
$parser = XML::LibXML->new;
#$parser->set_option(huge => 0);
@@ -54,18 +53,22 @@ ok(!$parser->get_option('huge'), "huge mode disabled by default");
$doc = eval { $parser->parse_string($evil_xml); };
+$err = $@;
+
# TEST
-isnt("$@", "", "exception thrown during parse");
+isnt("$err", "", "exception thrown during parse");
# TEST
-like($@, qr/entity.*loop/si, "exception refers to entity reference loop");
+like($err, qr/entity/si, "exception refers to entity maximum loop (libxml2 <= 2.10) or depth (>= 2.11)");
$parser = XML::LibXML->new;
$doc = eval { $parser->parse_string($benign_xml); };
+$err = $@;
+
# TEST
-is("$@", "", "no exception thrown during parse");
+is("$err", "", "no exception thrown during parse");
my $body = $doc->findvalue( '/lolz' );
# TEST
diff --git a/t/namespace-magic-scalar-rt144415.t b/t/namespace-magic-scalar-rt144415.t
new file mode 100755
index 0000000..27cf0f0
--- /dev/null
+++ b/t/namespace-magic-scalar-rt144415.t
@@ -0,0 +1,35 @@
+use strict;
+use warnings;
+
+use Test::More tests => 3;
+
+use XML::LibXML;
+
+sub test_one {
+ local $Test::Builder::Level = $Test::Builder::Level + 1;
+
+ my ($ns, $name) = @_;
+ my $doc = XML::LibXML::Document->new;
+ my $foo = $doc->createElement('foo');
+ $foo->appendChild(
+ # we need to access the aliased SV directly, assigning it to a
+ # different variable hides the problem
+ $doc->createElementNS( $$ns, 'bar' ),
+ );
+
+ return is(
+ $foo->toString,
+ qq[<foo><bar xmlns="$$ns"/></foo>],
+ "$name: namespace should be in force",
+ );
+}
+
+my $ns1 = \'urn:a';
+my $ns2 = \substr($$ns1, 0);
+
+# TEST
+test_one $ns1, 'plain scalar';
+# TEST
+test_one $ns2, 'magic scalar';
+# TEST
+test_one \"$$ns2", 'copy of magic scalar';