diff options
author | Shawn O. Pearce <spearce@spearce.org> | 2007-01-14 02:44:18 -0500 |
---|---|---|
committer | Shawn O. Pearce <spearce@spearce.org> | 2007-01-14 02:44:18 -0500 |
commit | 1fcdd62adf81a172f45c7c6a58177212d500b9d9 (patch) | |
tree | 94acde078fd78c3d214fe09d45e85ed346a2f2d4 /patch-delta.c | |
parent | 9938ffc53a15c755bbd3894c02492b940ea34c4c (diff) | |
parent | 696b1b507f8ff9e80a2edc4eced59ca8cdda920e (diff) | |
download | git-1fcdd62adf81a172f45c7c6a58177212d500b9d9.tar.gz git-1fcdd62adf81a172f45c7c6a58177212d500b9d9.tar.xz |
Merge branch 'master' into sp/fast-import
I'm bringing master in early so that the OBJ_OFS_DELTA implementation
is available as part of the topic. This way git-fast-import can
learn about this new slightly smaller and faster packfile format,
and can generate them directly rather than needing to have them be
repacked with git-pack-objects.
Due to the API changes in master during the period of development
of git-fast-import, a few minor tweaks to fast-import.c are needed
to produce a working merge. I've done them here as part of the
merge to ensure bisection always works.
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Diffstat (limited to 'patch-delta.c')
-rw-r--r-- | patch-delta.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/patch-delta.c b/patch-delta.c index e3a1d425e..ed9db81fa 100644 --- a/patch-delta.c +++ b/patch-delta.c @@ -9,8 +9,7 @@ * published by the Free Software Foundation. */ -#include <stdlib.h> -#include <string.h> +#include "git-compat-util.h" #include "delta.h" void *patch_delta(const void *src_buf, unsigned long src_size, @@ -34,9 +33,7 @@ void *patch_delta(const void *src_buf, unsigned long src_size, /* now the result size */ size = get_delta_hdr_size(&data, top); - dst_buf = malloc(size + 1); - if (!dst_buf) - return NULL; + dst_buf = xmalloc(size + 1); dst_buf[size] = 0; out = dst_buf; @@ -55,13 +52,13 @@ void *patch_delta(const void *src_buf, unsigned long src_size, if (cp_off + cp_size < cp_size || cp_off + cp_size > src_size || cp_size > size) - goto bad; + break; memcpy(out, (char *) src_buf + cp_off, cp_size); out += cp_size; size -= cp_size; } else if (cmd) { if (cmd > size) - goto bad; + break; memcpy(out, data, cmd); out += cmd; data += cmd; @@ -72,12 +69,14 @@ void *patch_delta(const void *src_buf, unsigned long src_size, * extensions. In the mean time we must fail when * encountering them (might be data corruption). */ + error("unexpected delta opcode 0"); goto bad; } } /* sanity check */ if (data != top || size != 0) { + error("delta replay has gone wild"); bad: free(dst_buf); return NULL; |