summaryrefslogtreecommitdiffhomepage
path: root/src/orderedmap.c
diff options
context:
space:
mode:
authorrofl0r <rofl0r@users.noreply.github.com>2021-03-14 16:06:10 +0000
committerrofl0r <rofl0r@users.noreply.github.com>2021-03-14 16:06:10 +0000
commitc4231e58bf2613b6ab8b34f234c117c5d1488931 (patch)
treecb8260ee0f6364fd1369948f1cfc591da203cf03 /src/orderedmap.c
parent38934921c4d6801ebdc13d32b4238c4a2ffa9c98 (diff)
orderedmap: fix memory leak when using orderedmap_remove()
closes #351
Diffstat (limited to 'src/orderedmap.c')
-rw-r--r--src/orderedmap.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/orderedmap.c b/src/orderedmap.c
index 4902be0..1818e27 100644
--- a/src/orderedmap.c
+++ b/src/orderedmap.c
@@ -81,14 +81,19 @@ char* orderedmap_find(struct orderedmap *o, const char *key) {
int orderedmap_remove(struct orderedmap *o, const char *key) {
size_t i;
char *lk;
- htab_value *lv, *v = htab_find(o->map, key);
+ char *sk;
+ char **sv;
+ htab_value *lv, *v = htab_find2(o->map, key, &sk);
if(!v) return 0;
- htab_delete(o->map, key);
+ sv = sblist_get(o->values, v->n);
+ free(*sv);
sblist_delete(o->values, v->n);
i = 0;
while((i = htab_next(o->map, i, &lk, &lv))) {
if(lv->n > v->n) lv->n--;
}
+ htab_delete(o->map, key);
+ free(sk);
return 1;
}