merge from gcc

This commit is contained in:
DJ Delorie
2011-08-12 18:44:43 +00:00
parent d20c1c3fea
commit 091c2a968a
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> 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.

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 /* 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;
} }