From 6c6f7196880bdb4f48742b3df4457feca9c332d0 Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Wed, 10 Oct 2012 00:22:38 -0400 Subject: [PATCH] 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 --- lib/md5.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) 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); -- 2.47.3