Re: [evolution-patches] Fix for 64-bit cleanliness in pkcs12 code



committed

On Mon, 2004-08-02 at 11:27 -0400, Jeffrey Stedfast wrote:
> right. here's a patch.
> 
> Jeff
> 
> On Mon, 2004-08-02 at 11:22 -0400, Dan Winship wrote:
> > On Mon, 2004-08-02 at 10:46 -0400, Rodney Dawes wrote:
> > > This patch fixes the following warning in e-pkcs12.c:
> > > 
> > > e-pkcs12.c: In function `prompt_for_password':
> > > e-pkcs12.c:243: warning: passing arg 2 of `memcpy' makes pointer from
> > > integer without a cast
> > > 
> > > This can cause problems on 64-bit machines.
> > 
> > This is not a 64-bit problem. The problem is that the big-endian branch
> > of that code is completely wrong (and your patch doesn't fix it. Among
> > other things, note that uni isn't even initialized).
> > 
> > -- Dan
> > 
> > 
> > _______________________________________________
> > evolution-patches mailing list
> > evolution-patches lists ximian com
> > http://lists.ximian.com/mailman/listinfo/evolution-patches
> > 
> Plain text document attachment (patch)
> ? patch
> Index: e-pkcs12.c
> ===================================================================
> RCS file: /cvs/gnome/evolution/smime/lib/e-pkcs12.c,v
> retrieving revision 1.4
> diff -u -r1.4 e-pkcs12.c
> --- e-pkcs12.c	11 Feb 2004 19:14:50 -0000	1.4
> +++ e-pkcs12.c	2 Aug 2004 15:27:16 -0000
> @@ -222,26 +222,23 @@
>  					   NULL);
>  
>  	if (passwd) {
> -		int len = g_utf8_strlen (passwd, -1);
> -		gunichar2 uni;
> -		int i;
> -		char *p;
> -
> +		size_t len = strlen (passwd);
> +		const char *inptr = passwd;
> +		char *outptr = pwd->data;
> +		gunichar2 c;
> +		
>  		SECITEM_AllocItem(NULL, pwd, sizeof (gunichar2) * (len + 1));
> -		memset (pwd->data, 0, sizeof (gunichar2) * (len + 1));
> -
> -#ifdef IS_LITTLE_ENDIAN
> -		p = passwd;
> -		for (i=0; i < len; i++) {
> -			uni = (gunichar2)(g_utf8_get_char (p) & 0xFFFF);
> -			p = g_utf8_next_char (p);
> -
> -			pwd->data[2*i] = (unsigned char)(uni >> 8);
> -			pwd->data[2*i+1] = (unsigned char)(uni & 0xFF);
> +		
> +		while (inptr && (c = (gunichar2) (g_utf8_get_char (inptr) & 0xffff))) {
> +			inptr = g_utf8_next_char (inptr);
> +			c = GUINT16_TO_BE (c);
> +			*outptr++ = ((char *) &c)[0];
> +			*outptr++ = ((char *) &c)[1];
>  		}
> -#else
> -		memcpy (pwd->data, uni, pwd->len-2);
> -#endif
> +		
> +		*outptr++ = 0;
> +		*outptr++ = 0;
> +		
>  		memset (passwd, 0, strlen (passwd));
>  		g_free (passwd);
>  	}
-- 
Jeffrey Stedfast
Evolution Hacker - Novell, Inc.
fejj ximian com  - www.novell.com

Attachment: smime.p7s
Description: S/MIME cryptographic signature



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]