diff options
author | Linus Torvalds <torvalds@osdl.org> | 2006-03-25 13:28:28 -0800 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-03-25 16:34:05 -0800 |
commit | c150462824008957f568ca7aa05a65b35d860eb9 (patch) | |
tree | 9f0213576687c9fb2389e8f404b336901383f430 | |
parent | 6a1640ffc6431d66fa33c8256fd19b5ee0bc1b47 (diff) | |
download | git-c150462824008957f568ca7aa05a65b35d860eb9.tar.gz |
git-apply: safety fixes
This was triggered by me testing the "@@" numbering shorthand by GNU
patch, which not only showed that git-apply thought it meant the number
was duplicated (when it means that the second number is 1), but my tests
showed than when git-apply mis-understood the number, it would then not
raise an alarm about it if the patch ended early.
Now, this doesn't actually _matter_, since with a three-line context, the
only case that "x,1" will be shorthanded to "x" is when x itself is 1 (in
which case git-apply got it right), but the fact that git-apply would also
silently accept truncated patches was a missed opportunity for additional
sanity-checking.
So make git-apply refuse to look at a patch fragment that ends early.
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
-rw-r--r-- | apply.c | 4 |
1 files changed, 3 insertions, 1 deletions
@@ -693,7 +693,7 @@ static int parse_range(const char *line, int len, int offset, const char *expect line += digits; len -= digits; - *p2 = *p1; + *p2 = 1; if (*line == ',') { digits = parse_num(line+1, p2); if (!digits) @@ -901,6 +901,8 @@ static int parse_fragment(char *line, unsigned long size, struct patch *patch, s break; } } + if (oldlines || newlines) + return -1; /* If a fragment ends with an incomplete line, we failed to include * it in the above loop because we hit oldlines == newlines == 0 * before seeing it. |