summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Jeff King <peff@peff.net>2007-01-25 23:48:58 -0500
committerLibravatar Junio C Hamano <junkio@cox.net>2007-01-25 21:17:19 -0800
commite1b161161d253a9e7e4cf21cd2ab5b82a4b85273 (patch)
treeb9adbfc7986c01d9e77d3e46f4af7ca42009e90e
parentAllow non-developer to clone, checkout and fetch more easily. (diff)
downloadtgif-e1b161161d253a9e7e4cf21cd2ab5b82a4b85273.tar.xz
diffcore-pickaxe: fix infinite loop on zero-length needle
The "contains" algorithm runs into an infinite loop if the needle string has zero length. The loop could be modified to handle this, but it makes more sense to simply have an empty needle return no matches. Thus, a command like git log -S produces no output. We place the check at the top of the function so that we get the same results with or without --pickaxe-regex. Note that until now, git log -S --pickaxe-regex would match everything, not nothing. Arguably, an empty pickaxe string should simply produce an error message; however, this is still a useful assertion to add to the algorithm at this layer of the code. Noticed by Bill Lear. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
-rw-r--r--diffcore-pickaxe.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/diffcore-pickaxe.c b/diffcore-pickaxe.c
index de44adabf0..286919e714 100644
--- a/diffcore-pickaxe.c
+++ b/diffcore-pickaxe.c
@@ -14,6 +14,8 @@ static unsigned int contains(struct diff_filespec *one,
const char *data;
if (diff_populate_filespec(one, 0))
return 0;
+ if (!len)
+ return 0;
sz = one->size;
data = one->data;