diff --git a/src/passbook.c b/src/passbook.c
index 1358659a89c1d144b607130d2efd74cd31dd4f87..185ef01140b3a4b9a632b1a0c2a4d77a41ebe09a 100644
--- a/src/passbook.c
+++ b/src/passbook.c
@@ -77,6 +77,7 @@ static void node_edit_cred(node_t * p, node_t *q){
 
   p->cred.username = q->cred.username;
   p->cred.password = q->cred.password;
+  free(q->url);
   free(q);
 }
 
@@ -135,6 +136,17 @@ static node_t * put(node_t *p, const char *url, const cred_t cred){
   return node_insert(p,node_new(url,cred));
 }
 
+/* destroy tree rooted at p */
+static void destroy(node_t *p){
+  while (p != NULL){
+    node_t * left = p->left;
+    node_t * const right = p->right;
+    left = node_insert(left,right);
+    node_free(p);
+    p = left;
+  }
+}
+
 /* returns a pointer to the tree with the node removed (if it was present) */
 static node_t * rem(node_t *p, const char *url){
   node_t * const start = p;
@@ -531,25 +543,12 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
   f = fopen(LIBFUZZER_INPUT_FILE,"r");
   run(f);
   fclose(f);
+  destroy(map);
+  map = NULL;
   return 0; /* libFuzzer wants 0 returned always */
 }
 #else
 int main(const int argc, const char * argv[]){
-  cred_t cred1, cred2;
-  cred1.password = "asdfa";
-  cred1.username = "user1";
-  cred2.password = "asdfa";
-  cred2.username = "user2";
-  node_t *p = put(NULL,"http://blah.com",cred1);
-  assert(NULL == lookup(p,"http://meh.com"));
-  assert(NULL == rem(p,"http://blah.com"));
-  p = put(NULL,"http://meh.com",cred2);
-  p = put(p,"http://blah.com",cred1);
-  assert(p == lookup(p,"http://meh.com"));
-  assert(strcmp(lookup(p,"http://blah.com")->cred.username,cred1.username) == 0);
-  p = put(p,"http://blah.com",cred2);
-  assert(strcmp(lookup(p,"http://blah.com")->cred.username,cred2.username) == 0);
-
   if (argc <= 1){
     fprintf(stderr,"Usage: %s file1 file2 ...\n",argv[0]);
     fprintf(stderr,"       use - to read from standard input\n");
@@ -565,6 +564,7 @@ int main(const int argc, const char * argv[]){
       f = fopen(argv[i],"r");
       if (f == NULL){
         fprintf(stderr,"Error opening %s for reading\n",argv[i]);
+        destroy(map);
         exit(1);
       }
     }
@@ -577,6 +577,7 @@ int main(const int argc, const char * argv[]){
       fclose(f);
     }
   }
+  destroy(map);
   return 0;
 }
 #endif