diff --git a/perl-XML-LibXML-bigendian.patch b/perl-XML-LibXML-bigendian.patch new file mode 100644 index 0000000..5235544 --- /dev/null +++ b/perl-XML-LibXML-bigendian.patch @@ -0,0 +1,33 @@ +STRLEN has 64 bits here and int has 32, so the (int*) cast in +XML::LibXML::Document::toStringHTML() makes htmlDocDumpMemory() store +the 32-bit length of the result into a 64-bit variable. Depending on +the endianness, it either works OK (LE) or corrupts the variable (BE) + +Just use an 'int' instead, and cast it to an STRLEN later in the +newSVpvn() call. +--- + LibXML.xs | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/LibXML.xs b/LibXML.xs +index 8ac23bf..581cc48 100644 +--- a/LibXML.xs ++++ b/LibXML.xs +@@ -2930,13 +2930,13 @@ toStringHTML(self) + XML::LibXML::Document::serialize_html = 1 + PREINIT: + xmlChar *result=NULL; +- STRLEN len = 0; ++ int len = 0; + PREINIT_SAVED_ERROR + CODE: + PERL_UNUSED_VAR(ix); + xs_warn( "use no formated toString!" ); + INIT_ERROR_HANDLER; +- htmlDocDumpMemory(self, &result, (int*)&len); ++ htmlDocDumpMemory(self, &result, &len); + CLEANUP_ERROR_HANDLER; + REPORT_ERROR(0); + +-- +1.7.10 diff --git a/perl-XML-LibXML.changes b/perl-XML-LibXML.changes index 1d5cc75..984497e 100644 --- a/perl-XML-LibXML.changes +++ b/perl-XML-LibXML.changes @@ -1,3 +1,15 @@ +------------------------------------------------------------------- +Fri May 25 08:40:07 UTC 2012 - dvaleev@suse.com + +- STRLEN has 64 bits here and int has 32, so the (int*) cast in +XML::LibXML::Document::toStringHTML() makes htmlDocDumpMemory() store +the 32-bit length of the result into a 64-bit variable. Depending on +the endianness, it either works OK (LE) or corrupts the variable (BE) + +Just use an 'int' instead, and cast it to an STRLEN later in the +newSVpvn() call. + + ------------------------------------------------------------------- Mon Apr 16 15:20:35 UTC 2012 - dvaleev@suse.com diff --git a/perl-XML-LibXML.spec b/perl-XML-LibXML.spec index 73ec8d4..d81de69 100644 --- a/perl-XML-LibXML.spec +++ b/perl-XML-LibXML.spec @@ -37,6 +37,7 @@ Requires: perl(XML::SAX) >= 0.11 Provides: perl-XML-LibXML-Common = %{version} Obsoletes: perl-XML-LibXML-Common < %{version} BuildRoot: %{_tmppath}/%{name}-%{version}-build +Patch: perl-XML-LibXML-bigendian.patch %{perl_requires} %description @@ -47,6 +48,7 @@ the high performance DOM implementation. %prep %setup -q -n %{cpan_name}-%{version} +%patch -p1 %build # [2,7,1,0], # broken release, broken utf-16 @@ -58,10 +60,6 @@ perl Makefile.PL OPTIMIZE="%{optflags} -Wall" make %{?_smp_mflags} %check -%ifarch ppc64 s390x -# see rhbz#769537 -rm t/12html.t -%endif make test %install