Patchwork [libjava] Fix md5test, shatest on Tru64 UNIX with native libiconv (PR libgcj/49314)

login
register
mail settings
Submitter Rainer Orth
Date June 21, 2011, 1:55 p.m.
Message ID <yddpqm7i90w.fsf@manam.CeBiTec.Uni-Bielefeld.DE>
Download mbox | patch
Permalink /patch/101292/
State New
Headers show

Comments

Rainer Orth - June 21, 2011, 1:55 p.m.
As described in the PR, unless the UTF-8 encoding of \ufeff is padded
with a NUL byte, the iconv_init test fails for the native Tru64 UNIX
libiconv, iconv_byte_swap isn't set correctly and later iconv calls
fail.  This patch fixes this, allowing the arraycopy testcase in the PR
and the actual md5test and shatest testcases to succeed.  This way, I
get clean libjava testsuite results.

Tested by rebuilding libgcj.so with the fixed natIconv.cc.  A full
rebuild and test of libgcj is currently running on alpha-dec-osf5.1b.

Ok for mainline if it passes?

Thanks.
	Rainer


2011-06-21  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

	PR libgcj/49314
	* gnu/gcj/convert/natIconv.cc (iconv_init): Pad in[] with NUL byte.
Andrew Haley - June 21, 2011, 4:52 p.m.
On 06/21/2011 02:55 PM, Rainer Orth wrote:
> As described in the PR, unless the UTF-8 encoding of \ufeff is padded
> with a NUL byte, the iconv_init test fails for the native Tru64 UNIX
> libiconv, iconv_byte_swap isn't set correctly and later iconv calls
> fail.  This patch fixes this, allowing the arraycopy testcase in the PR
> and the actual md5test and shatest testcases to succeed.  This way, I
> get clean libjava testsuite results.
> 
> Tested by rebuilding libgcj.so with the fixed natIconv.cc.  A full
> rebuild and test of libgcj is currently running on alpha-dec-osf5.1b.
> 
> Ok for mainline if it passes?
> 
> Thanks.
> 	Rainer
> 
> 
> 2011-06-21  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
> 
> 	PR libgcj/49314
> 	* gnu/gcj/convert/natIconv.cc (iconv_init): Pad in[] with NUL byte.
> 

Sure, thanks.

Andrew.

Patch

diff --git a/libjava/gnu/gcj/convert/natIconv.cc b/libjava/gnu/gcj/convert/natIconv.cc
--- a/libjava/gnu/gcj/convert/natIconv.cc
+++ b/libjava/gnu/gcj/convert/natIconv.cc
@@ -1,6 +1,6 @@ 
 // natIconv.cc -- Java side of iconv() reader.
 
-/* Copyright (C) 2000, 2001, 2003, 2006  Free Software Foundation
+/* Copyright (C) 2000, 2001, 2003, 2006, 2011  Free Software Foundation
 
    This file is part of libgcj.
 
@@ -264,17 +264,19 @@  gnu::gcj::convert::IOConverter::iconv_in
   if (handle != (iconv_t) -1)
     {
       jchar c;
-      unsigned char in[3];
+      unsigned char in[4];
       char *inp, *outp;
       size_t inc, outc, r;
 
-      // This is the UTF-8 encoding of \ufeff.
+      // This is the UTF-8 encoding of \ufeff.  At least Tru64 UNIX libiconv
+      // needs the trailing NUL byte, otherwise iconv fails with EINVAL.
       in[0] = 0xef;
       in[1] = 0xbb;
       in[2] = 0xbf;
+      in[3] = 0x00;
 
       inp = (char *) in;
-      inc = 3;
+      inc = 4;
       outp = (char *) &c;
       outc = 2;