[ospfd] lsdb_delete/discard_from_db should be more robust to bad args

2006-05-31 Paul Jakma <paul.jakma@sun.com>

	* ospf_lsdb.c: (ospf_lsdb_delete) robustify against NULL arguments,
	  print warning.
	* ospf_lsa.c: (ospf_discard_from_db) ditto.
	  (ospf_maxage_lsa_remover) Check lsa->lsdb for validity, possible
	  mitigation (but not solution) for bug #269.
diff --git a/ospfd/ospf_lsa.c b/ospfd/ospf_lsa.c
index 7c3be3d..a0afbad 100644
--- a/ospfd/ospf_lsa.c
+++ b/ospfd/ospf_lsa.c
@@ -2679,6 +2679,17 @@
 {
   struct ospf_lsa *old;
   
+  if (!lsdb)
+    {
+      zlog_warn ("%s: Called with NULL lsdb!", __func__);
+      if (!lsa)
+        zlog_warn ("%s: and NULL LSA!", __func__);
+      else
+        zlog_warn ("LSA[Type%d:%s]: not associated with LSDB!",
+                   lsa->data->type, inet_ntoa (lsa->data->id));
+      return;
+    }
+  
   old = ospf_lsdb_lookup (lsdb, lsa);
 
   if (!old)
@@ -3014,8 +3025,14 @@
           }
 
 	/* Remove from lsdb. */
-        ospf_discard_from_db (ospf, lsa->lsdb, lsa);
-        ospf_lsdb_delete (lsa->lsdb, lsa);
+	if (lsa->lsdb)
+	  {
+	    ospf_discard_from_db (ospf, lsa->lsdb, lsa);
+	    ospf_lsdb_delete (lsa->lsdb, lsa);
+          }
+        else
+          zlog_warn ("%s: LSA[Type%d:%s]: No associated LSDB!", __func__,
+                     lsa->data->type, inet_ntoa (lsa->data->id));
       }
 
   /*    A MaxAge LSA must be removed immediately from the router's link