Commit c49b1a29 by Steve Ellcey Committed by Steve Ellcey

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
parent e02d979a
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> 2011-08-06 Uros Bizjak <ubizjak@gmail.com>
* testsuite/test-expandargv.c (writeout_test): Check result of fwrite. * testsuite/test-expandargv.c (writeout_test): Check result of fwrite.
......
...@@ -76,15 +76,19 @@ md5_init_ctx (struct md5_ctx *ctx) ...@@ -76,15 +76,19 @@ md5_init_ctx (struct md5_ctx *ctx)
/* Put result from CTX in first 16 bytes following RESBUF. The result /* Put result from CTX in first 16 bytes following RESBUF. The result
must be in little endian byte order. must be in little endian byte order.
IMPORTANT: On some systems it is required that RESBUF is correctly IMPORTANT: RESBUF may not be aligned as strongly as MD5_UNIT32 so we
aligned for a 32 bits value. */ put things in a local (aligned) buffer first, then memcpy into RESBUF. */
void * void *
md5_read_ctx (const struct md5_ctx *ctx, void *resbuf) md5_read_ctx (const struct md5_ctx *ctx, void *resbuf)
{ {
((md5_uint32 *) resbuf)[0] = SWAP (ctx->A); md5_uint32 buffer[4];
((md5_uint32 *) resbuf)[1] = SWAP (ctx->B);
((md5_uint32 *) resbuf)[2] = SWAP (ctx->C); buffer[0] = SWAP (ctx->A);
((md5_uint32 *) resbuf)[3] = SWAP (ctx->D); buffer[1] = SWAP (ctx->B);
buffer[2] = SWAP (ctx->C);
buffer[3] = SWAP (ctx->D);
memcpy (resbuf, buffer, 16);
return resbuf; return resbuf;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment