8
0

Accepting request 122259 from home:k0da:ppc

- 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.

OBS-URL: https://build.opensuse.org/request/show/122259
OBS-URL: https://build.opensuse.org/package/show/devel:languages:perl/perl-XML-LibXML?expand=0&rev=36
This commit is contained in:
2012-05-28 21:45:17 +00:00
committed by Git OBS Bridge
parent fef5013a20
commit 4d1037ec3c
3 changed files with 47 additions and 4 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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