aboutsummaryrefslogtreecommitdiffstats
path: root/xdiff-interface.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2020-03-17 15:02:21 -0700
committerJunio C Hamano <gitster@pobox.com>2020-03-17 15:02:21 -0700
commita7a2e12b6eb97126f9d07298f281eb1c91730750 (patch)
tree84ed769e256ef366e0f003c93530a39051de10b3 /xdiff-interface.c
parent93d08928910200969c486328e576057aada6f9dc (diff)
parentcf82bff73f11d3197aa6b667002ea86da1dfa835 (diff)
downloadgit-a7a2e12b6eb97126f9d07298f281eb1c91730750.tar.gz
Merge branch 'jk/clang-sanitizer-fixes' into maint
C pedantry ;-) fix. * jk/clang-sanitizer-fixes: obstack: avoid computing offsets from NULL pointer xdiff: avoid computing non-zero offset from NULL pointer avoid computing zero offsets from NULL pointer merge-recursive: use subtraction to flip stage merge-recursive: silence -Wxor-used-as-pow warning
Diffstat (limited to 'xdiff-interface.c')
-rw-r--r--xdiff-interface.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/xdiff-interface.c b/xdiff-interface.c
index 8509f9ea22..4d20069302 100644
--- a/xdiff-interface.c
+++ b/xdiff-interface.c
@@ -84,8 +84,8 @@ static void trim_common_tail(mmfile_t *a, mmfile_t *b)
{
const int blk = 1024;
long trimmed = 0, recovered = 0;
- char *ap = a->ptr + a->size;
- char *bp = b->ptr + b->size;
+ char *ap = a->size ? a->ptr + a->size : a->ptr;
+ char *bp = b->size ? b->ptr + b->size : b->ptr;
long smaller = (a->size < b->size) ? a->size : b->size;
while (blk + trimmed <= smaller && !memcmp(ap - blk, bp - blk, blk)) {
@@ -250,9 +250,13 @@ void xdiff_set_find_func(xdemitconf_t *xecfg, const char *value, int cflags)
ALLOC_ARRAY(regs->array, regs->nr);
for (i = 0; i < regs->nr; i++) {
struct ff_reg *reg = regs->array + i;
- const char *ep = strchr(value, '\n'), *expression;
+ const char *ep, *expression;
char *buffer = NULL;
+ if (!value)
+ BUG("mismatch between line count and parsing");
+ ep = strchr(value, '\n');
+
reg->negate = (*value == '!');
if (reg->negate && i == regs->nr - 1)
die("Last expression must not be negated: %s", value);
@@ -265,7 +269,7 @@ void xdiff_set_find_func(xdemitconf_t *xecfg, const char *value, int cflags)
if (regcomp(&reg->re, expression, cflags))
die("Invalid regexp to look for hunk header: %s", expression);
free(buffer);
- value = ep + 1;
+ value = ep ? ep + 1 : NULL;
}
}