From 9fdbf217bb1cf73b8dadaa10b6da00e2391d2706 Mon Sep 17 00:00:00 2001 From: Tristan Matthews <tristan.matthews@savoirfairelinux.com> Date: Wed, 10 Jul 2013 16:30:26 -0400 Subject: [PATCH] * #27096: iax: use union instead of dereferencing type-punned pointer Patch sent upstream at https://sourceforge.net/p/iaxclient/bugs/43/ --- daemon/libs/iax2/md5.c | 8 ++++---- daemon/libs/iax2/md5.h | 5 ++++- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/daemon/libs/iax2/md5.c b/daemon/libs/iax2/md5.c index d84c66b892..3830a61fda 100644 --- a/daemon/libs/iax2/md5.c +++ b/daemon/libs/iax2/md5.c @@ -116,7 +116,7 @@ void IAX_MD5Update(struct IAX_MD5Context *ctx, uint8_t const *buf, unsigned int } memcpy(p, buf, t); IAX_byteReverse(ctx->in, 16); - IAX_MD5Transform(ctx->buf, (uint32_t *) ctx->in); + IAX_MD5Transform(ctx->buf, ctx->in_32); buf += t; len -= t; } @@ -171,10 +171,10 @@ void IAX_MD5Final(uint8_t digest[16], struct IAX_MD5Context *ctx) IAX_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]; + ctx->in_32[14] = ctx->bits[0]; + ctx->in_32[15] = ctx->bits[1]; - IAX_MD5Transform(ctx->buf, (uint32_t *) ctx->in); + IAX_MD5Transform(ctx->buf, ctx->in_32); IAX_byteReverse((uint8_t *) ctx->buf, 4); memcpy(digest, ctx->buf, 16); memset(ctx, 0, sizeof(*ctx)); /* In case it's sensitive */ diff --git a/daemon/libs/iax2/md5.h b/daemon/libs/iax2/md5.h index b3ad37a9b3..f54b68bfb2 100644 --- a/daemon/libs/iax2/md5.h +++ b/daemon/libs/iax2/md5.h @@ -11,7 +11,10 @@ typedef unsigned char uint8_t; struct IAX_MD5Context { uint32_t buf[4]; uint32_t bits[2]; - uint8_t in[64]; + union { + uint8_t in[64]; + uint32_t in_32[16]; + }; }; void IAX_MD5Init(struct IAX_MD5Context *context); -- GitLab