tag 570670 patch
thanks
On Sat, Mar 13, 2010 at 12:48:13AM +0100, gregor herrmann wrote:
> On Fri, 12 Mar 2010 22:10:36 +0100, Jozef Kutej wrote:
>
> > the package builds find on i386 and amd64. In CPAN there is one similar
> > smoketesting test for alpha arch:
>
> In Debian it fails on alpha and ia64, so something seems fishy:
>
> https://buildd.debian.org/pkg.cgi?pkg=libunicode-map8-perl
> https://buildd.debian.org/status/package.php?p=libunicode-map8-perl
Here's the backtrace on ia64 (merulo.d.o):
zsh: segmentation fault (core dumped) PERL_DL_NONLAZY=1 perl -Iblib/lib
-Iblib/arch t/map8.t
Core was generated by `perl -Iblib/lib -Iblib/arch t/map8.t'.
Program terminated with signal 11, Segmentation fault.
#0 0x20000000062f5220 in XS_Unicode__Map8_recode8 (my_perl=0x6000000000004010,
cv=0x6000000000074260)
at Map8.xs:359
359 res[rlen] = '\0';
(gdb) bt
#0 0x20000000062f5220 in XS_Unicode__Map8_recode8 (my_perl=0x6000000000004010,
cv=0x6000000000074260)
at Map8.xs:359
#1 0x20000000001d2be0 in Perl_pp_entersub (my_perl=0x6000000000004010) at
pp_hot.c:2888
#2 0x20000000001cef00 in Perl_runops_standard (my_perl=0x6000000000004010) at
run.c:40
#3 0x20000000000e8d60 in S_run_body (my_perl=<value optimized out>) at
perl.c:2431
#4 perl_run (my_perl=<value optimized out>) at perl.c:2349
#5 0x4000000000001290 in main (argc=Cannot access memory at address
0xc00000000001b516
) at perlmain.c:117
Looks like the problem is that sizeof(STRLEN) != sizeof(int) but
the map8_recode8() call on Map8.xs:358 mixes up pointers to them.
Also, there seems to be a typo in the function prototype in map8.h so
we don't even get a compiler warning. With that fixed, I see
Map8.xs: In function ‘XS_Unicode__Map8_recode8’:
Map8.xs:358: warning: passing argument 6 of ‘map8_recode8’ from incompatible
pointer type
map8.h:83: note: expected ‘int *’ but argument is of type ‘STRLEN *’
I'm attaching a patch that makes the test pass for me on ia64.
FWIW, this is also [rt.cpan.org #43404] (which contains an identical
patch to mine) and [rt.cpan.org #24652].
It has also failed on amd64 for at least Fedora, see
https://bugzilla.redhat.com/show_bug.cgi?id=182514
--
Niko Tyni [email protected]
>From d8c6831c66b91d0db878ac247d607aa8daec4dcb Mon Sep 17 00:00:00 2001
From: Niko Tyni <[email protected]>
Date: Sat, 20 Mar 2010 23:31:17 +0200
Subject: [PATCH] Fix test failures on 64-bit architectures due to incompatible pointer types
http://bugs.debian.org/570670
[rt.cpan.org #43404]
[rt.cpan.org #24652].
https://bugzilla.redhat.com/show_bug.cgi?id=182514
---
Map8.xs | 2 +-
map8.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/Map8.xs b/Map8.xs
index 789f921..074ad99 100644
--- a/Map8.xs
+++ b/Map8.xs
@@ -347,7 +347,7 @@ recode8(m1, m2, str)
Map8* m2
PREINIT:
STRLEN len;
- STRLEN rlen;
+ int rlen;
char* res;
INPUT:
char* str = SvPV(ST(2), len);
diff --git a/map8.h b/map8.h
index 007c5de..98dfb3b 100644
--- a/map8.h
+++ b/map8.h
@@ -80,7 +80,7 @@ void map8_free(Map8*);
U16* map8_to_str16(Map8*, U8*, U16*, int, int*);
U8* map8_to_str8 (Map8*, U16*, U8*, int, int*);
-U8* map8_recode_8(Map8*, Map8*, U8*, U8*, int, int*);
+U8* map8_recode8(Map8*, Map8*, U8*, U8*, int, int*);
int map8_empty_block(Map8*, U8);
--
1.7.0