Ignore null pointer in taint_destroy. Closes bug #21863
authorJohn Darrington <john@darrington.wattle.id.au>
Mon, 24 Dec 2007 03:54:38 +0000 (03:54 +0000)
committerJohn Darrington <john@darrington.wattle.id.au>
Mon, 24 Dec 2007 03:54:38 +0000 (03:54 +0000)
src/libpspp/ChangeLog
src/libpspp/taint.c

index 12c70f9d4a0e6f94371edb155041079db16cae42..502b929275948820c2751136ddd49c769f3258d5 100644 (file)
@@ -1,3 +1,7 @@
+2007-12-24  John Darrington <john@darrington.wattle.id.au>
+
+        * taint.c (taint_destroy): Return true if pointer is null.
+
 2007-11-25  Ben Pfaff  <blp@gnu.org>
 
        * float-format.c (assemble_number): Only store 32 bits for Z short
index 0c4194d524bea593d160239f4caffe39bd99497a..3a74587bb5918ae8cee61766619187b5ca758532 100644 (file)
@@ -95,26 +95,31 @@ taint_clone (const struct taint *taint_)
 bool
 taint_destroy (struct taint *taint)
 {
-  bool was_tainted = taint_is_tainted (taint);
-  if (--taint->ref_cnt == 0)
+  if ( taint )
     {
-      size_t i, j;
-
-      for (i = 0; i < taint->predecessors.cnt; i++)
-        for (j = 0; j < taint->successors.cnt; j++)
-          taint_propagate (taint->predecessors.taints[i],
-                           taint->successors.taints[j]);
-
-      for (i = 0; i < taint->predecessors.cnt; i++)
-        taint_list_remove (&taint->predecessors.taints[i]->successors, taint);
-      for (i = 0; i < taint->successors.cnt; i++)
-        taint_list_remove (&taint->successors.taints[i]->predecessors, taint);
-
-      taint_list_destroy (&taint->successors);
-      taint_list_destroy (&taint->predecessors);
-      free (taint);
+      bool was_tainted = taint_is_tainted (taint);
+      if (--taint->ref_cnt == 0)
+       {
+         size_t i, j;
+
+         for (i = 0; i < taint->predecessors.cnt; i++)
+           for (j = 0; j < taint->successors.cnt; j++)
+             taint_propagate (taint->predecessors.taints[i],
+                              taint->successors.taints[j]);
+
+         for (i = 0; i < taint->predecessors.cnt; i++)
+           taint_list_remove (&taint->predecessors.taints[i]->successors, taint);
+         for (i = 0; i < taint->successors.cnt; i++)
+           taint_list_remove (&taint->successors.taints[i]->predecessors, taint);
+
+         taint_list_destroy (&taint->successors);
+         taint_list_destroy (&taint->predecessors);
+         free (taint);
+       }
+      return !was_tainted;
     }
-  return !was_tainted;
+
+  return true;
 }
 
 /* Adds a propagation relationship from FROM to TO.  This means