Dict: fix out-of-bounds for long terms
[idzebra-moved-to-github.git] / dict / lookgrep.c
index 99b72b8..f480029 100644 (file)
@@ -1,5 +1,5 @@
 /* This file is part of the Zebra server.
-   Copyright (C) 1994-2010 Index Data
+   Copyright (C) 1994-2011 Index Data
 
    Zebra is free software; you can redistribute it and/or modify it under
    the terms of the GNU General Public License as published by the Free
@@ -19,6 +19,9 @@
 
 
 
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
 #include <stdlib.h>
 #include <string.h>
 #include <stdio.h>
@@ -409,7 +412,7 @@ int dict_lookup_grep(Dict dict, const char *pattern, int range, void *client,
 
     mc = mk_MatchContext(dfa, range);
 
-    Rj = (MatchWord *) xcalloc((MAX_LENGTH+1) * mc->n, sizeof(*Rj));
+    Rj = (MatchWord *) xcalloc((MAX_LENGTH+2) * mc->fact, sizeof(*Rj));
 
     set_bit (mc, Rj, 0, 0);
     for (d = 1; d<=mc->range; d++)