From 6bd9cd76cd21800918e769628edf71f8bf57ea88 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Tue, 1 Dec 2020 16:58:29 +0000 Subject: [PATCH] database: Restart flatten algorithm from the top when a network was dropped We used to simply take the first element from the stack after we have split a network. That is wrong because it is not passing through any filters and no further subnet checks. It could have therefore been that the tree was not entirely flat. Reported-by: Arne Fitzenreiter Signed-off-by: Michael Tremer --- src/database.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/database.c b/src/database.c index 7100298..4b8bf1d 100644 --- a/src/database.c +++ b/src/database.c @@ -1380,11 +1380,10 @@ static int __loc_database_enumerator_next_network_flattened( loc_network_list_unref(subnets); loc_network_list_unref(excluded); - // Replace network with the first one from the stack + // Drop the network and restart the whole process again to pick the next network loc_network_unref(*network); - *network = loc_network_list_pop_first(enumerator->stack); - return 0; + return __loc_database_enumerator_next_network_flattened(enumerator, network); } LOC_EXPORT int loc_database_enumerator_next_network( -- 2.39.2