]> git.ipfire.org Git - thirdparty/git.git/commitdiff
diffstat_consume(): assert non-zero length
authorJeff King <peff@peff.net>
Tue, 18 Oct 2022 01:01:17 +0000 (21:01 -0400)
committerJunio C Hamano <gitster@pobox.com>
Tue, 18 Oct 2022 04:24:03 +0000 (21:24 -0700)
The callback interface for xdiff_emit_line_fn gives us a line/len pair,
but diffstat_consume() never looks at "len". At first glance this seems
like a bug that could cause us to read further than xdiff intends. But
in practice, we read only the first character, and xdiff would never
pass us an empty line.

Let's add a run-time assertion that this is true, which clarifies our
assumption and silences -Wunused-parameter.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
diff.c

diff --git a/diff.c b/diff.c
index 648f6717a5597c30c423256a25e0fece08cd30de..bba888a34a6c743406f7d6a5895abbdcab8d0bea 100644 (file)
--- a/diff.c
+++ b/diff.c
@@ -2488,6 +2488,9 @@ static int diffstat_consume(void *priv, char *line, unsigned long len)
        struct diffstat_t *diffstat = priv;
        struct diffstat_file *x = diffstat->files[diffstat->nr - 1];
 
+       if (!len)
+               BUG("xdiff fed us an empty line");
+
        if (line[0] == '+')
                x->added++;
        else if (line[0] == '-')