Re: Segmentation fault in git read-tree
On Thu, 13 Mar 2008, Linus Torvalds wrote:
>
> Ok, I can reproduce this, I'm on it like a maggot on a two-week-dead baby
> donkey.
Ok, that was embarrassing.
This should fix it. Spot the stupid stack corruption..
Linus
---
unpack-trees.c | 6 ++++--
1 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/unpack-trees.c b/unpack-trees.c
index be89d52..b62b054 100644
--- a/unpack-trees.c
+++ b/unpack-trees.c
@@ -8,6 +8,8 @@
#include "progress.h"
#include "refs.h"
+#define MAX_UNPACK_TREES 4
+
static void add_entry(struct unpack_trees_options *o, struct cache_entry *ce,
unsigned int set, unsigned int clear)
{
@@ -123,7 +125,7 @@ static int unpack_index_entry(struct cache_entry *ce, struct unpack_trees_option
int traverse_trees_recursive(int n, unsigned long dirmask, unsigned long df_conflicts, struct name_entry *names, struct traverse_info *info)
{
int i;
- struct tree_desc t[3];
+ struct tree_desc t[MAX_UNPACK_TREES];
struct traverse_info newinfo;
struct name_entry *p;
@@ -327,7 +329,7 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options
{
static struct cache_entry *dfc;
- if (len > 4)
+ if (len > MAX_UNPACK_TREES)
die("unpack_trees takes at most four trees");
memset(&state, 0, sizeof(state));
state.base_dir = "";