Imported Upstream version 2.0209 upstream/2.0209
authorTizenOpenSource <tizenopensrc@samsung.com>
Thu, 15 Feb 2024 02:02:19 +0000 (11:02 +0900)
committerTizenOpenSource <tizenopensrc@samsung.com>
Thu, 15 Feb 2024 02:02:19 +0000 (11:02 +0900)
53 files changed:
Changes
LibXML.pm
LibXML.pod
LibXML.xs
MANIFEST
META.json
META.yml
Makefile.PL
docs/libxml.dbk
lib/XML/LibXML/Attr.pod
lib/XML/LibXML/AttributeHash.pm
lib/XML/LibXML/Boolean.pm
lib/XML/LibXML/CDATASection.pod
lib/XML/LibXML/Comment.pod
lib/XML/LibXML/Common.pm
lib/XML/LibXML/Common.pod
lib/XML/LibXML/DOM.pod
lib/XML/LibXML/Devel.pm
lib/XML/LibXML/Document.pod
lib/XML/LibXML/DocumentFragment.pod
lib/XML/LibXML/Dtd.pod
lib/XML/LibXML/Element.pod
lib/XML/LibXML/ErrNo.pm
lib/XML/LibXML/ErrNo.pod
lib/XML/LibXML/Error.pm
lib/XML/LibXML/Error.pod
lib/XML/LibXML/InputCallback.pod
lib/XML/LibXML/Literal.pm
lib/XML/LibXML/Namespace.pod
lib/XML/LibXML/Node.pod
lib/XML/LibXML/NodeList.pm
lib/XML/LibXML/Number.pm
lib/XML/LibXML/PI.pod
lib/XML/LibXML/Parser.pod
lib/XML/LibXML/Pattern.pod
lib/XML/LibXML/Reader.pm
lib/XML/LibXML/Reader.pod
lib/XML/LibXML/RegExp.pod
lib/XML/LibXML/RelaxNG.pod
lib/XML/LibXML/SAX.pm
lib/XML/LibXML/SAX.pod
lib/XML/LibXML/SAX/Builder.pm
lib/XML/LibXML/SAX/Builder.pod
lib/XML/LibXML/SAX/Generator.pm
lib/XML/LibXML/SAX/Parser.pm
lib/XML/LibXML/Schema.pod
lib/XML/LibXML/Text.pod
lib/XML/LibXML/XPathContext.pm
lib/XML/LibXML/XPathContext.pod
lib/XML/LibXML/XPathExpression.pod
perl-libxml-mm.c
t/35huge_mode.t
t/namespace-magic-scalar-rt144415.t [new file with mode: 0755]

diff --git a/Changes b/Changes
index e00313e5b241e672c8d0e0990238255adb3833d4..8ac00f0d5c7329ad0ac0e4a438b1956cc7487bd2 100644 (file)
--- 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
index 7f033ca73171fb21a484fde68b5abbbd47ba380c..1356cf17a102f801b53287b7d8ddfd5ca5429132 100644 (file)
--- 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 ();
index 73a9e50df881f578a8dfad3d11e3c14e6267586a..d06fe37f6befba43a1e75ed8197424bcdc195baf 100644 (file)
@@ -507,7 +507,7 @@ Petr Pajas
 
 =head1 VERSION
 
-2.0207
+2.0209
 
 =head1 COPYRIGHT
 
index 51bb3bebe10671510fffd3f1635175d65e76c776..b5b0b9534cb11b772a83ffb5a044bd56ab9d1749 100644 (file)
--- 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);
index 42976962865c736f3acd229183e4404911a12df2..96cf9797bcd8eefe1863a3f3cdd8e640be8db8f9 100644 (file)
--- 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
index 2bfa2599fc9cfdf9065c459167919e00cef37bf8..e427687208366ad70b9dca394181208db28c7c85 100644 (file)
--- 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"
 }
index fee45e087e35eb47e3dc055a87b59f79d5cb3364..ed2886c14c430478bead61273e5084f52d7b795e 100644 (file)
--- 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'
index 3d1902e65d8c0bd85e92ec7eac8491fe4278e8bd..98f8cc146199f0ccd7f2837e15845abe36d1e772 100644 (file)
@@ -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",
index c7a4208603986f839e2d4f95c958c92ddea38b88..371c5c03cb1e7764c3be9fdd61fc2e0af89d51a0 100644 (file)
@@ -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>
 
index fa6a5cd3925b2f722a63eb59152f5671af639a10..94bd691e48921056a4710d9cbd59609e9eb40032 100644 (file)
@@ -121,7 +121,7 @@ Petr Pajas
 
 =head1 VERSION
 
-2.0207
+2.0209
 
 =head1 COPYRIGHT
 
index c83f0dc61ff6e35ca414009bddda87f7deb47985..87ca8bd523a13fcdf478cd103d3e511702e3c6b0 100644 (file)
@@ -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
 {
index faa53b76e9a3532ed7b706806fa0a99344f7a8ee..7e3da31cdeef175b43ca2eaad08a3e0dec9943ec 100644 (file)
@@ -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,
index 1113e5678563cbeb2294a9ddb3754d77f6298e5f..996e0254473ea49256c9f00128407fcaf71e2b02 100644 (file)
@@ -45,7 +45,7 @@ Petr Pajas
 
 =head1 VERSION
 
-2.0207
+2.0209
 
 =head1 COPYRIGHT
 
index aaacdcea273ffed63f9227d63f8922a97e0fe402..9ae60a237192ebb7a801da363332af8b7a862e70 100644 (file)
@@ -46,7 +46,7 @@ Petr Pajas
 
 =head1 VERSION
 
-2.0207
+2.0209
 
 =head1 COPYRIGHT
 
index eb7681cf4bcd1622a756ae47a73c519a615e33f2..e478972a8790d3a72626b49b878c0bda041a55bd 100644 (file)
@@ -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);
 
index 94231094cd5246afcd6be30ba118cc36752466bc..d17ffab6b26d313e05c486c50149a65dee5c54d7 100644 (file)
@@ -116,7 +116,7 @@ Petr Pajas
 
 =head1 VERSION
 
-2.0207
+2.0209
 
 =head1 COPYRIGHT
 
index d01e75a877603aaa932930b75b79d133eb78e0af..08fef1ce5da79f9adfabd741480e253cd87b411d 100644 (file)
@@ -129,7 +129,7 @@ Petr Pajas
 
 =head1 VERSION
 
-2.0207
+2.0209
 
 =head1 COPYRIGHT
 
index 8f139122e452c09eaf3afccf09774f86a1616259..7297bedefda63cf32205e4657b62923ee2650d37 100644 (file)
@@ -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;
 
index 2cdc5760fab8ba886ca49d0019013c12477c76ee..f433f9be4a5f01fbc1eebf258962c565d2bfa437 100644 (file)
@@ -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
 
index 61e741cb795cb973465ccf711c8b266de1827e0d..b015d052f6ec13bd1af475fa78980e7102fc2f91 100644 (file)
@@ -27,7 +27,7 @@ Petr Pajas
 
 =head1 VERSION
 
-2.0207
+2.0209
 
 =head1 COPYRIGHT
 
index 294cb17c53c29b4519012e2c94a17ee8e8aa5a8d..f82dd8657431fa7a7b1e1f3aa0d830c0b1ce6575 100644 (file)
@@ -89,7 +89,7 @@ Petr Pajas
 
 =head1 VERSION
 
-2.0207
+2.0209
 
 =head1 COPYRIGHT
 
index f6f0b74bc1e9c4da579759c669827a77752bf552..044bd90b5a43c2942556a5e2a8e9f2516a766451 100644 (file)
@@ -382,7 +382,7 @@ Petr Pajas
 
 =head1 VERSION
 
-2.0207
+2.0209
 
 =head1 COPYRIGHT
 
index 0fa6308effa54767fce027ff807b181eb7eb52b8..9a8450b079ba713871c5b16f9baf1200071794d3 100644 (file)
@@ -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;
index 4b1b59e2fd218a5ec1316390891c5306d61aa127..a32ce632218742a2251d03157d11a9be318e7c75 100644 (file)
@@ -17,7 +17,7 @@ Petr Pajas
 
 =head1 VERSION
 
-2.0207
+2.0209
 
 =head1 COPYRIGHT
 
index 9855eaf575fec8aa22b1dd3527e071d70cfb62ca..ebf1641e8c339de0fc76561077a15076a5eda526 100644 (file)
@@ -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
index b8915e37cc8c328dc0c0599190e7973fde38a472..4896be8460e1604748338da7deda826994fe0159 100644 (file)
@@ -244,7 +244,7 @@ Petr Pajas
 
 =head1 VERSION
 
-2.0207
+2.0209
 
 =head1 COPYRIGHT
 
index 3cfcd15bc2b8e1afc5ae2264483fe22d56849b16..79ebdd8438efeb552ac31acc762301219da4b03a 100644 (file)
@@ -280,7 +280,7 @@ Petr Pajas
 
 =head1 VERSION
 
-2.0207
+2.0209
 
 =head1 COPYRIGHT
 
index 1bc9fa1152eea897e3ab50d90c01588de2f10b31..06b42b5e19da3385123ac80a0eca3a125211ebde 100644 (file)
@@ -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,
index 85d55985f695b484dff2afdac88a05450dc52587..26c2200ed6233690b2b4c805f14f390b22c4f64e 100644 (file)
@@ -141,7 +141,7 @@ Petr Pajas
 
 =head1 VERSION
 
-2.0207
+2.0209
 
 =head1 COPYRIGHT
 
index 6f8e9a55fda202813114bc77ed0758661a4f06a4..74cda2cf638cc6a78e1b18a4749f813d0d0349d3 100644 (file)
@@ -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
 
index ca748d9bdfec0242ffa75282df3c2fab46401b8c..8bd58cf0776625500535adeee6b9981e33f08bd6 100644 (file)
@@ -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,
index cddd4c071b8f47cf03dd241765de7ef2be220dd8..feb3d3926d2806440cfd0013e69e1323d07069cb 100644 (file)
@@ -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,
index 99323ffdc7f7505c24de9eb0475fdadc867c62c5..22502c7f3bb0b3e2e77177944cc9d60801425444 100644 (file)
@@ -74,7 +74,7 @@ Petr Pajas
 
 =head1 VERSION
 
-2.0207
+2.0209
 
 =head1 COPYRIGHT
 
index 034395dd5f1c9eabcbddd6ac0f404335f198b8ae..c46cd115e619021da279044a1349144a59770195 100644 (file)
@@ -988,7 +988,7 @@ Petr Pajas
 
 =head1 VERSION
 
-2.0207
+2.0209
 
 =head1 COPYRIGHT
 
index 3cf4d72c7b3901a5154d7ef411df7885ca47db93..431709856958f72d9e62650cb195ff0cbedf2675 100644 (file)
@@ -94,7 +94,7 @@ Petr Pajas
 
 =head1 VERSION
 
-2.0207
+2.0209
 
 =head1 COPYRIGHT
 
index 40f093ceba685c0ce7b7f593d735eea773a20fc2..875273706310ee275b62edea8c252cdd1ce2c8f3 100644 (file)
@@ -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;
 
index 094e852b2d66f07dee1def907cac38f4a8a0d662..234787a1d7b24e2cdbdd8c3c81ce5eaeaefbdcbf 100644 (file)
@@ -657,7 +657,7 @@ Petr Pajas
 
 =head1 VERSION
 
-2.0207
+2.0209
 
 =head1 COPYRIGHT
 
index 0ef9b6ec52aac86cd1fbb8f96ff596839c134361..817aaeb3373c171399e368fdbce8a53619361c63 100644 (file)
@@ -58,7 +58,7 @@ Petr Pajas
 
 =head1 VERSION
 
-2.0207
+2.0209
 
 =head1 COPYRIGHT
 
index a05d5830f70ac902bbf3b9a71bde44f25a84f4ea..dbeccd422aa0a65579c03b02fe9de805dfe547ea 100644 (file)
@@ -73,7 +73,7 @@ Petr Pajas
 
 =head1 VERSION
 
-2.0207
+2.0209
 
 =head1 COPYRIGHT
 
index 681499e8bc09d7fcd405cad3dee655da2f541657..deff54d989822794c8080f58e69d8de58369af7f 100644 (file)
@@ -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;
index dc736f770653a20f7cd3460ff57bc98de920ccd9..cff0763b0019c7ac77d3eb56f41cba7c363fa90a 100644 (file)
@@ -47,7 +47,7 @@ Petr Pajas
 
 =head1 VERSION
 
-2.0207
+2.0209
 
 =head1 COPYRIGHT
 
index c16ee871907b06dc2086140ecb59c3e25b2fe03a..f7709ebb94cc2f6c842beb082954b42b8b3ec445 100644 (file)
@@ -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;
index c199c2f825b0b61ac9dec1074ed35b19e70d6ceb..c35e493145b24354541db16bcb9993f679e4e9af 100644 (file)
@@ -38,7 +38,7 @@ Petr Pajas
 
 =head1 VERSION
 
-2.0207
+2.0209
 
 =head1 COPYRIGHT
 
index 2ae881faf2d4e0e38d42a564d66196ccdb28e12b..0680516b9b04d2d8672957580564447f236aebc4 100644 (file)
@@ -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;
index 0b2ba85a43daa5ded4666363f9acf918a91cc4ed..d4c4abc2cf63fd6177056ef3fddad1438a93259f 100644 (file)
@@ -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 {
index 5bfc95891060236af92eb781d753596669ad67d3..020552f80e2457ce4d0384833f4ebd3f0d09dfb9 100644 (file)
@@ -69,7 +69,7 @@ Petr Pajas
 
 =head1 VERSION
 
-2.0207
+2.0209
 
 =head1 COPYRIGHT
 
index be6528064e1e478b8fb301a779dec4bf45c8e11c..53099dacaf56c4f3a6a961149fc6d1254416af74 100644 (file)
@@ -170,7 +170,7 @@ Petr Pajas
 
 =head1 VERSION
 
-2.0207
+2.0209
 
 =head1 COPYRIGHT
 
index 10e62edba5a00054649c00ba7ecb5e936f383a40..7085cfa25ea64dbc428b2581e37fc150b8aa8474 100644 (file)
@@ -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)
index 0b8f81ced81210896960650765997f95a8072d1b..10e84b425df7e391405f10443a6add16fbd27eb4 100644 (file)
@@ -362,7 +362,7 @@ Petr Pajas
 
 =head1 VERSION
 
-2.0207
+2.0209
 
 =head1 COPYRIGHT
 
index 5ff7b0d0bc9fe800fe3012460e073a0438b4ee28..3cd91ede4b8add0785f3734e40934cc56cd71392 100644 (file)
@@ -52,7 +52,7 @@ Petr Pajas
 
 =head1 VERSION
 
-2.0207
+2.0209
 
 =head1 COPYRIGHT
 
index b433c5c6fcbd08c22c0826086b1222529938d09d..a3e78a25d457639eef4d316eee6efb17afecd0c6 100644 (file)
@@ -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);
index 1ccb334b916fdd982939327f08055854c71152cd..059d781df2fda8b8ae785f5f81fbccde0250ae44 100644 (file)
@@ -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 (executable)
index 0000000..27cf0f0
--- /dev/null
@@ -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';