git tag --contains: avoid stack overflow
commitcbc60b67201e083a4970c8731c5382a575357e36
authorJean-Jacques Lafay <jeanjacques.lafay@gmail.com>
Thu, 24 Apr 2014 12:24:39 +0000 (24 14:24 +0200)
committerJunio C Hamano <gitster@pobox.com>
Fri, 25 Apr 2014 16:35:20 +0000 (25 09:35 -0700)
tree3272cd96773c56c647a03c3bf0f46f784eda4a32
parent779792a5f24bb4e8049c4f88ad752e70d4a8a080
git tag --contains: avoid stack overflow

In large repos, the recursion implementation of contains(commit,
commit_list) may result in a stack overflow. Replace the recursion with
a loop to fix it.

This problem is more apparent on Windows than on Linux, where the stack
is more limited by default.

See also this thread on the msysGit list:

https://groups.google.com/d/topic/msysgit/FqT6boJrb2g/discussion

[jes: re-written to imitate the original recursion more closely]

Thomas Braun pointed out several documentation shortcomings.

Tests are run only if ulimit -s is available.  This means they cannot
be run on Windows.

Signed-off-by: Jean-Jacques Lafay <jeanjacques.lafay@gmail.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Tested-by: Stepan Kasal <kasal@ucw.cz>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/tag.c
t/t7004-tag.sh