git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] diffcore-pickaxe: fix infinite loop on zero-length needle

From
Jeff King <peff@peff.net>
Date
Jan 26, 2007, 04:48 UTC
Message-ID
<20070126044858.GA8653@coredump.intra.peff.net>
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>
---
On Thu, Jan 25, 2007 at 06:06:51PM -0600, Bill Lear wrote:
> git log -S --check foo
>
> and the thing went off into outer space.  Now at over 2 1/2 minutes of
> CPU time on my 2 Ghz Opteron box...
 diffcore-pickaxe.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/diffcore-pickaxe.c b/diffcore-pickaxe.c
index de44ada..286919e 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;
-- 
1.5.0.rc2.gccd57
Next: Jeff King
Message 1 of 3 in “diffcore-pickaxe: fix infinite loop on zero-length needle”
  1. diffcore-pickaxe: fix infinite loop on zero-length needleJeff King, Jan 26, 2007
  2. Jeff KingJan 26, 2007
  3. Junio C HamanoJan 26, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.