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