make sure callers of got_object_idset_add() free data.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
diff --git a/lib/pack_create.c b/lib/pack_create.c
index b52856e..4e9a9b9 100644
--- a/lib/pack_create.c
+++ b/lib/pack_create.c
@@ -867,11 +867,19 @@ add_object(int want_meta, struct got_object_idset *idset,
(*nfound)++;
err = report_progress(progress_cb, progress_arg, rl,
*ncolored, *nfound, *ntrees, 0L, 0, 0, 0, 0);
- if (err)
+ if (err) {
+ clear_meta(m);
+ free(m);
return err;
+ }
}
- return got_object_idset_add(idset, id, m);
+ err = got_object_idset_add(idset, id, m);
+ if (err) {
+ clear_meta(m);
+ free(m);
+ }
+ return err;
}
static const struct got_error *
diff --git a/lib/reference.c b/lib/reference.c
index ea1f566..8616b4e 100644
--- a/lib/reference.c
+++ b/lib/reference.c
@@ -1569,8 +1569,10 @@ add_object_id_map_entry(struct got_object_idset *idset,
TAILQ_INIT(&ent->refs);
err = got_object_idset_add(idset, id, ent);
- if (err)
+ if (err) {
+ free(ent);
return err;
+ }
}
err = got_reflist_entry_dup(&new, re);