Thank you for submitting this.

This was a very interesting find.

> On 27 Jun 2025, at 20:53, Adolf Belka <[email protected]> wrote:
> 
> - Patch added to fix bactracking after no match found bug. When the next 
> version of
>   libloc is released then this patch can be removed as the patch will be 
> integrated in
>   with that version.
> - Update of rootfile not required.
> - Tested out on local build of libloc-0.9.18
> 
> Fixes: bug13861
> Reported-by: Adolf Belka <[email protected]>
> Suggested-by: Michael Tremer <[email protected]>
> Tested-by: Adolf Belka <[email protected]>
> Signed-off-by: Adolf Belka <[email protected]>
> ---
> lfs/libloc                                    |  1 +
> ...tch_was_found_at_the_end_of_the_tree.patch | 31 +++++++++++++++++++
> 2 files changed, 32 insertions(+)
> create mode 100644 
> src/patches/libloc-0.9.18_Fix_backtracking_after_no_match_was_found_at_the_end_of_the_tree.patch
> 
> diff --git a/lfs/libloc b/lfs/libloc
> index f2f0aa8a9..e9bbe16ba 100644
> --- a/lfs/libloc
> +++ b/lfs/libloc
> @@ -82,6 +82,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
> # https://lists.ipfire.org/pipermail/development/2022-November/014763.html
> cd $(DIR_APP) && patch -Np1 < 
> $(DIR_SRC)/src/patches/libloc-0.9.18-Revert-Install-Perl-files-to-Perl-vendor-directory.patch
> cd $(DIR_APP) && patch -Np1 < 
> $(DIR_SRC)/src/patches/libloc-0.9.18_gettext-0.25_fix.patch
> + cd $(DIR_APP) && patch -Np1 < 
> $(DIR_SRC)/src/patches/libloc-0.9.18_Fix_backtracking_after_no_match_was_found_at_the_end_of_the_tree.patch
> cd $(DIR_APP) && ./autogen.sh
> cd $(DIR_APP) && ./configure \
> --prefix=/usr \
> diff --git 
> a/src/patches/libloc-0.9.18_Fix_backtracking_after_no_match_was_found_at_the_end_of_the_tree.patch
>  
> b/src/patches/libloc-0.9.18_Fix_backtracking_after_no_match_was_found_at_the_end_of_the_tree.patch
> new file mode 100644
> index 000000000..6ac9acf3c
> --- /dev/null
> +++ 
> b/src/patches/libloc-0.9.18_Fix_backtracking_after_no_match_was_found_at_the_end_of_the_tree.patch
> @@ -0,0 +1,31 @@
> +X-Git-Url: 
> http://git.ipfire.org/?p=location%2Flibloc.git;a=blobdiff_plain;f=src%2Fdatabase.c;h=c251061cc8a254879491ebe133b1b4f3b58ddf30;hp=0c8608542aaad6e82c4d8602bbeb388ab43225bb;hb=95d271bb90b4cebe81c288a95a2336aa63bac4d7;hpb=d1120513a30de43308d9ed848f7ef3c6ede6d767
> +
> +diff --git a/src/database.c b/src/database.c
> +index 0c86085..c251061 100644
> +--- a/src/database.c
> ++++ b/src/database.c
> +@@ -907,13 +907,7 @@ static int __loc_database_lookup(struct loc_database* 
> db, const struct in6_addr*
> + 
> + // Move on to the next node
> + r = __loc_database_lookup(db, address, network, network_address, 
> node_index, level + 1);
> +-
> +- // End here if a result was found
> +- if (r == 0)
> +- return r;
> +-
> +- // Raise any errors
> +- else if (r < 0)
> ++ if (r < 0)
> + return r;
> + 
> + DEBUG(db->ctx, "No match found below level %u\n", level);
> +@@ -922,7 +916,7 @@ static int __loc_database_lookup(struct loc_database* 
> db, const struct in6_addr*
> + }
> + 
> + // If this node has a leaf, we will check if it matches
> +- if (__loc_database_node_is_leaf(node_v1)) {
> ++ if (!*network && __loc_database_node_is_leaf(node_v1)) {
> + r = __loc_database_lookup_handle_leaf(db, address, network, 
> network_address, level, node_v1);
> + if (r < 0)
> + return r;
> +
> -- 
> 2.50.0
> 


Reply via email to