Hi Ian,
One of the static analyzers we use is throwing up an error report for
one of the libiberty source files:
Error: BUFFER_SIZE (CWE-474):
libiberty/sha1.c:261: overlapping_buffer: The source buffer "&ctx->buffer[16]"
potentially overlaps with the destination buffer "ctx->buffer", which results
in undefined behavior for "memcpy".
libiberty/sha1.c:261: remediation: Use memmove instead of "memcpy".
# 259| sha1_process_block (ctx->buffer, 64, ctx);
# 260| left_over -= 64;
# 261|-> memcpy (ctx->buffer, &ctx->buffer[16], left_over);
# 262| }
# 263| ctx->buflen = left_over;
Looking at the source code I am not sure if the problem can actually
be triggered in reality, but there seems to be no harm in being
cautious, so I would like to ask for permission to apply the following
patch:
diff --git a/libiberty/sha1.c b/libiberty/sha1.c
index e3d7f86e351..7d15d48d11d 100644
--- a/libiberty/sha1.c
+++ b/libiberty/sha1.c
@@ -258,7 +258,7 @@ sha1_process_bytes (const void *buffer, size_t len, struct
sha1_ctx *ctx)
{
sha1_process_block (ctx->buffer, 64, ctx);
left_over -= 64;
- memcpy (ctx->buffer, &ctx->buffer[16], left_over);
+ memmove (ctx->buffer, &ctx->buffer[16], left_over);
}
ctx->buflen = left_over;
}
Cheers
Nick