From 582270f21559ed5e84b9755aa18f15fa3466bc84 Mon Sep 17 00:00:00 2001
From: ulfvonbelow <striness@tilde.club>
Date: Sun, 5 May 2024 23:45:29 -0500
Subject: [PATCH] TRANSPORT: fix contains_address.

GNUNET_memcmp takes two typed pointers and compares the bytes of the objects
pointed to, using the size of the type of the first argument. The first
argument here is of type char *, so it compares the character it points to to
the character the second argument points to. This is probably not what was
intended.
---
 src/service/transport/gnunet-service-transport.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/service/transport/gnunet-service-transport.c b/src/service/transport/gnunet-service-transport.c
index 38371032e..e1748fa17 100644
--- a/src/service/transport/gnunet-service-transport.c
+++ b/src/service/transport/gnunet-service-transport.c
@@ -11682,8 +11682,10 @@ contains_address (void *cls,
   struct TransportGlobalNattedAddressClosure *tgna_cls = cls;
   struct TransportGlobalNattedAddress *tgna = value;
   char *addr = (char *) &tgna[1];
+  size_t cls_tgna_length = strlen (tgna_cls->addr);
 
-  if (0 == GNUNET_memcmp (addr, tgna_cls->addr))
+  if (cls_tgna_length == ntohl (tgna->address_length)
+      && 0 == strncmp (addr, tgna_cls->addr, cls_tgna_length))
   {
     tgna_cls->tgna = tgna;
     return GNUNET_NO;
-- 
2.41.0

