diff options
author | Ondrej Zajicek (work) <santiago@crfreenet.org> | 2020-11-24 03:42:23 +0100 |
---|---|---|
committer | Ondrej Zajicek (work) <santiago@crfreenet.org> | 2020-11-24 03:42:23 +0100 |
commit | 1678bc07467e6d977fc2f6bf830274ca92e0a6e5 (patch) | |
tree | fdbdc70d526b7dedabdabd9bed889f0fdc2e023e | |
parent | c9ae81656f97bcc55910e80b6f00d3ee9383d848 (diff) |
Fix some failed asserts due to add_tail()
When config structures are copied due to template application,
we need to reset list node structure before calling add_tail().
Thanks to Mikael Magnusson for patches.
-rw-r--r-- | conf/conf.c | 1 | ||||
-rw-r--r-- | nest/proto.c | 1 | ||||
-rw-r--r-- | proto/static/static.c | 1 |
3 files changed, 3 insertions, 0 deletions
diff --git a/conf/conf.c b/conf/conf.c index b21d5213..6f64b541 100644 --- a/conf/conf.c +++ b/conf/conf.c @@ -573,6 +573,7 @@ cfg_copy_list(list *dest, list *src, unsigned node_size) { dn = cfg_alloc(node_size); memcpy(dn, sn, node_size); + memset(dn, 0, sizeof(node)); add_tail(dest, dn); } } diff --git a/nest/proto.c b/nest/proto.c index 41b3a6b9..748601c3 100644 --- a/nest/proto.c +++ b/nest/proto.c @@ -626,6 +626,7 @@ channel_copy_config(struct channel_config *src, struct proto_config *proto) struct channel_config *dst = cfg_alloc(src->channel->config_size); memcpy(dst, src, src->channel->config_size); + memset(&dst->n, 0, sizeof(node)); add_tail(&proto->channels, &dst->n); CALL(src->channel->copy_config, dst, src); diff --git a/proto/static/static.c b/proto/static/static.c index 7b22d49b..941e916f 100644 --- a/proto/static/static.c +++ b/proto/static/static.c @@ -643,6 +643,7 @@ static_copy_config(struct proto_config *dest, struct proto_config *src) { dnh = cfg_alloc(sizeof(struct static_route)); memcpy(dnh, snh, sizeof(struct static_route)); + memset(&dnh->n, 0, sizeof(node)); if (!drt) add_tail(&d->routes, &(dnh->n)); |