tag 673590 patch
thanks

On Sun, May 20, 2012 at 10:29:08PM +0200, Cyril Brulebois wrote:

> If you were asking for a test-build, the answer is: no more FTBFS on s390x.

> On the int/size_t thingy, quoting [1]:

> |     sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) = 
> sizeof(size_t) 
> 
>  1. http://www.unix.org/whitepapers/64bit.html

Great, thanks.

Updated patch with the TODO part removed. I'd appreciate it if somebody
else from pkg-perl could pick this up from here, I'm seriously short
on time.
-- 
Niko Tyni   [email protected]
>From 99f67c5d0e13912c824b7d93ff4303524bd9cb54 Mon Sep 17 00:00:00 2001
From: Niko Tyni <[email protected]>
Date: Sun, 20 May 2012 22:32:31 +0300
Subject: [PATCH] Fix test failures on 64-bit big endian platforms

As seen in <http://bugs.debian.org/673590>, t/12html.t is crashing
on 64-bit big endian platforms with

>  Out of memory!
>  # Looks like you planned 43 tests but ran 41.
>  # Looks like your test exited with 1 just after 41.
>  t/12html.t ..........................
>  Dubious, test returned 1 (wstat 256, 0x100)
>  Failed 2/43 subtests

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

Reply via email to