Index: implicit.c
===================================================================
--- implicit.c	(revision 653)
+++ implicit.c	(working copy)
@@ -99,8 +99,9 @@
   struct file *intermediate_file = 0;
 
   /* List of dependencies found recursively.  */
-  struct file **intermediate_files
-    = (struct file **) xmalloc (max_pattern_deps * sizeof (struct file *));
+  struct file **intermediate_files = NULL;
+  if (max_pattern_deps) intermediate_files
+      = (struct file **) xmalloc (max_pattern_deps * sizeof (struct file *));
 
   /* List of the patterns used to find intermediate files.  */
   char **intermediate_patterns
@@ -120,7 +121,8 @@
   register unsigned int fullstemlen = 0;
 
   /* Buffer in which we store all the rules that are possibly applicable.  */
-  struct rule **tryrules
+  struct rule **tryrules = NULL;
+  if (num_pattern_rules) tryrules
     = (struct rule **) xmalloc (num_pattern_rules * max_pattern_targets
                                 * sizeof (struct rule *));
 
@@ -628,8 +630,8 @@
 	}
 
  done:
-  free (intermediate_files);
-  free (tryrules);
+  if (intermediate_files) free (intermediate_files);
+  if (tryrules) free (tryrules);
 
   return rule != 0;
 }
