From 91b826a38880fd8a989318585eb502582636ddd8 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Wed, 5 Nov 2014 08:23:15 +0100 Subject: [PATCH] Avoid sign extension when shifting the MSB. * sm/fingerprint.c (gpgsm_get_short_fingerprint): Cast MSB before shifting. * g10/build-packet.c (delete_sig_subpkt): Ditto. Signed-off-by: Werner Koch --- g10/build-packet.c | 6 ++++-- sm/fingerprint.c | 10 ++++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/g10/build-packet.c b/g10/build-packet.c index c04abab54..6bd1c9b0d 100644 --- a/g10/build-packet.c +++ b/g10/build-packet.c @@ -618,8 +618,10 @@ delete_sig_subpkt (subpktarea_t *area, sigsubpkttype_t reqtype ) if( n == 255 ) { if( buflen < 4 ) break; - n = (buffer[0] << 24) | (buffer[1] << 16) - | (buffer[2] << 8) | buffer[3]; + n = (((size_t)buffer[0] << 24) + | (buffer[1] << 16) + | (buffer[2] << 8) + | buffer[3]); buffer += 4; buflen -= 4; } diff --git a/sm/fingerprint.c b/sm/fingerprint.c index b0c7608cf..b849afb4e 100644 --- a/sm/fingerprint.c +++ b/sm/fingerprint.c @@ -149,8 +149,14 @@ gpgsm_get_short_fingerprint (ksba_cert_t cert, unsigned long *r_high) gpgsm_get_fingerprint (cert, GCRY_MD_SHA1, digest, NULL); if (r_high) - *r_high = ((digest[12]<<24)|(digest[13]<<16)|(digest[14]<< 8)|digest[15]); - return ((digest[16]<<24)|(digest[17]<<16)|(digest[18]<< 8)|digest[19]); + *r_high = (((unsigned long)digest[12]<<24) + |(digest[13]<<16) + |(digest[14]<< 8) + |digest[15]); + return (((unsigned long)digest[16]<<24) + |(digest[17]<<16) + |(digest[18]<<8) + |digest[19]); }