Index: /trunk/src/sh_log_evalrule.c
===================================================================
--- /trunk/src/sh_log_evalrule.c	(revision 336)
+++ /trunk/src/sh_log_evalrule.c	(revision 337)
@@ -186,4 +186,6 @@
 
   ng = SH_ALLOC(sizeof(struct sh_geval));
+  memset(ng, '\0', sizeof(struct sh_geval));
+
   ng->label       = sh_string_new_from_lchar(splits[0], lengths[0]);
   ng->flags       = RFL_ISGROUP;
@@ -292,4 +294,6 @@
 
   nh = SH_ALLOC(sizeof(struct sh_heval));
+  memset(nh, '\0', sizeof(struct sh_heval));
+
   nh->hostname = host;
   nh->hostname_extra = host_extra;
@@ -358,4 +362,6 @@
 
   nq = SH_ALLOC(sizeof(struct sh_qeval));
+  memset(nq, '\0', sizeof(struct sh_qeval));
+
   nq->label = sh_string_new_from_lchar(splits[0], lengths[0]);
   nq->alias = NULL;
@@ -609,4 +615,6 @@
 
   nr = SH_ALLOC(sizeof(struct sh_geval));
+  memset(nr, '\0', sizeof(struct sh_geval));
+
   nr->label       = NULL;
   nr->flags       = RFL_ISRULE;
@@ -789,8 +797,17 @@
       if (htmp->hostname_extra) (*pcre_free)(htmp->hostname_extra);
       if (htmp->hostname)       (*pcre_free)(htmp->hostname);
+      if (htmp->rulegroups)     htmp->rulegroups = NULL;
       hostlist = htmp->next;
+      htmp->next = NULL;
       SH_FREE(htmp);
       htmp = hostlist;
     }
+
+  hostlist   = NULL;
+  queuelist  = NULL;
+  grouplist  = NULL;
+
+  host_open  = NULL;
+  group_open = NULL;
 
   sh_keep_destroy();
@@ -1116,4 +1133,6 @@
 
       counter = SH_ALLOC(sizeof(struct sh_ceval));
+      memset(counter, '\0', sizeof(struct sh_ceval));
+
       counter->hostname    = sh_string_new_from_lchar(sh_string_str(host), 
 						      sh_string_len(host));
