]> git.ipfire.org Git - thirdparty/git.git/blobdiff - xdiff-interface.c
The sixth batch
[thirdparty/git.git] / xdiff-interface.c
index 8509f9ea223a1282a367874c3e3a3ef0c351a30f..4d20069302b25a133869380bd685e921ddc0bacc 100644 (file)
@@ -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;
        }
 }