Commit c5a0965a authored by Geoff Simmons's avatar Geoff Simmons

Bugfix object fini with more than one data entry (string, backend, etc).

Fixes #1
parent 4696b50d
# looks like -*- vcl -*-
varnishtest "object fini when there is more than one data entry"
varnish v1 -vcl {
import ${vmod_selector};
backend b { .host = "${bad_ip}"; }
sub vcl_init {
new s = selector.set();
s.add("foo", string="bar", backend=b, regex="baz",
integer=4711);
}
} -start
varnish v1 -vcl { backend b { .host = "${bad_ip}"; } }
varnish v1 -cli "vcl.list"
varnish v1 -cli "vcl.discard vcl1"
varnish v1 -cli "vcl.list"
...@@ -226,19 +226,20 @@ vmod_set__fini(struct vmod_selector_set **setp) ...@@ -226,19 +226,20 @@ vmod_set__fini(struct vmod_selector_set **setp)
set = *setp; set = *setp;
*setp = NULL; *setp = NULL;
PT_Free(set->origo); PT_Free(set->origo);
for (unsigned i = 0; i < set->nmembers; i++) for (unsigned i = 0; i < set->nmembers; i++) {
free(set->members[i]); free(set->members[i]);
for (int i = 0; i < __MAX_BITMAP; i++) for (int j = 0; j < __MAX_BITMAP; j++)
for (unsigned j = 0; j < set->nmembers; j++) if (is_added(set, i, j)) {
if (is_added(set, j, i)) { struct entry *entry = set->table[i];
struct entry *entry = set->table[j];
CHECK_OBJ_NOTNULL(entry, CHECK_OBJ_NOTNULL(entry,
VMOD_SELECTOR_ENTRY_MAGIC); VMOD_SELECTOR_ENTRY_MAGIC);
free(entry->string); free(entry->string);
if (entry->re != NULL) if (entry->re != NULL)
VRE_free(&entry->re); VRE_free(&entry->re);
FREE_OBJ(entry); FREE_OBJ(entry);
break;
} }
}
for (int i = 0; i < __MAX_BITMAP; i++) for (int i = 0; i < __MAX_BITMAP; i++)
vbit_destroy(set->bitmaps->bitmaps[i]); vbit_destroy(set->bitmaps->bitmaps[i]);
FREE_OBJ(set->bitmaps); FREE_OBJ(set->bitmaps);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment