From: Mike Frysinger Date: Wed, 10 Oct 2012 04:22:38 +0000 (-0400) Subject: md5: fix strict aliasing warnings X-Git-Tag: v2.23-rc1~646 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6c6f7196880bdb4f48742b3df4457feca9c332d0;p=thirdparty%2Futil-linux.git md5: fix strict aliasing warnings This is the same fix as was merged in gcc/binutils where this code appears to originate from. Signed-off-by: Mike Frysinger --- diff --git a/lib/md5.c b/lib/md5.c index 26ec4bbd8d..488d16ef69 100644 --- a/lib/md5.c +++ b/lib/md5.c @@ -138,9 +138,12 @@ void MD5Final(unsigned char digest[MD5LENGTH], struct MD5Context *ctx) } byteReverse(ctx->in, 14); - /* Append length in bits and transform */ - ((uint32_t *) ctx->in)[14] = ctx->bits[0]; - ((uint32_t *) ctx->in)[15] = ctx->bits[1]; + /* Append length in bits and transform. + * Use memcpy to avoid aliasing problems. On most systems, + * this will be optimized away to the same code. + */ + memcpy(&ctx->in[14 * sizeof(uint32_t)], &ctx->bits[0], 4); + memcpy(&ctx->in[15 * sizeof(uint32_t)], &ctx->bits[1], 4); MD5Transform(ctx->buf, (uint32_t *) ctx->in); byteReverse((unsigned char *) ctx->buf, 4);