md5.c (md5_read_ctx): Handle mis-aligned resbuf pointer.

2011-08-12  Steve Ellcey  <sje@cup.hp.com>

	* md5.c (md5_read_ctx): Handle mis-aligned resbuf pointer.

From-SVN: r177700
This commit is contained in:
Steve Ellcey 2011-08-12 16:06:57 +00:00 committed by Steve Ellcey
parent e02d979a34
commit c49b1a299e
2 changed files with 14 additions and 6 deletions

View File

@ -1,3 +1,7 @@
2011-08-12 Steve Ellcey <sje@cup.hp.com>
* md5.c (md5_read_ctx): Handle mis-aligned resbuf pointer.
2011-08-06 Uros Bizjak <ubizjak@gmail.com>
* testsuite/test-expandargv.c (writeout_test): Check result of fwrite.

View File

@ -76,15 +76,19 @@ md5_init_ctx (struct md5_ctx *ctx)
/* Put result from CTX in first 16 bytes following RESBUF. The result
must be in little endian byte order.
IMPORTANT: On some systems it is required that RESBUF is correctly
aligned for a 32 bits value. */
IMPORTANT: RESBUF may not be aligned as strongly as MD5_UNIT32 so we
put things in a local (aligned) buffer first, then memcpy into RESBUF. */
void *
md5_read_ctx (const struct md5_ctx *ctx, void *resbuf)
{
((md5_uint32 *) resbuf)[0] = SWAP (ctx->A);
((md5_uint32 *) resbuf)[1] = SWAP (ctx->B);
((md5_uint32 *) resbuf)[2] = SWAP (ctx->C);
((md5_uint32 *) resbuf)[3] = SWAP (ctx->D);
md5_uint32 buffer[4];
buffer[0] = SWAP (ctx->A);
buffer[1] = SWAP (ctx->B);
buffer[2] = SWAP (ctx->C);
buffer[3] = SWAP (ctx->D);
memcpy (resbuf, buffer, 16);
return resbuf;
}