summaryrefslogtreecommitdiff
path: root/lib/md5.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/md5.c')
-rw-r--r--lib/md5.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/lib/md5.c b/lib/md5.c
index 72b36f3..923a17c 100644
--- a/lib/md5.c
+++ b/lib/md5.c
@@ -123,6 +123,7 @@ md5_finish_ctx (struct md5_ctx *ctx, void *resbuf)
/* Take yet unprocessed bytes into account. */
md5_uint32 bytes = ctx->buflen;
size_t pad;
+ size_t offset;
/* Now count remaining bytes. */
ctx->total[0] += bytes;
@@ -133,9 +134,11 @@ md5_finish_ctx (struct md5_ctx *ctx, void *resbuf)
memcpy (&ctx->buffer[bytes], fillbuf, pad);
/* Put the 64-bit file length in *bits* at the end of the buffer. */
- ((md5_uint32 *) ctx->buffer)[bytes + pad] = SWAP (ctx->total[0] << 3);
- ((md5_uint32 *) ctx->buffer)[bytes + pad + 4] = SWAP ((ctx->total[1] << 3) |
- (ctx->total[0] >> 29));
+ offset = (bytes + pad) / sizeof (md5_uint32);
+ ((md5_uint32 *) ctx->buffer)[offset] = SWAP (ctx->total[0] << 3);
+ offset = (bytes + pad + 4) / sizeof (md5_uint32);
+ ((md5_uint32 *) ctx->buffer)[offset] = SWAP ((ctx->total[1] << 3) |
+ (ctx->total[0] >> 29));
/* Process last bytes. */
md5_process_block (ctx->buffer, bytes + pad + 8, ctx);