gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gnunet] branch master updated: -fixes memory leaks with message body de


From: gnunet
Subject: [gnunet] branch master updated: -fixes memory leaks with message body decoding
Date: Mon, 15 Nov 2021 11:18:46 +0100

This is an automated email from the git hooks/post-receive script.

thejackimonster pushed a commit to branch master
in repository gnunet.

The following commit(s) were added to refs/heads/master by this push:
     new 84a1ac1ba -fixes memory leaks with message body decoding
84a1ac1ba is described below

commit 84a1ac1baf0cdec49a2600f1872337612233ed01
Author: TheJackiMonster <thejackimonster@gmail.com>
AuthorDate: Mon Nov 15 11:18:39 2021 +0100

    -fixes memory leaks with message body decoding
    
    Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
---
 src/messenger/gnunet-service-messenger.c        | 8 +++++---
 src/messenger/gnunet-service-messenger_tunnel.c | 8 +++++---
 src/messenger/messenger_api.c                   | 3 +++
 src/messenger/messenger_api_message.c           | 8 ++++++++
 src/messenger/messenger_api_message.h           | 8 ++++++++
 5 files changed, 29 insertions(+), 6 deletions(-)

diff --git a/src/messenger/gnunet-service-messenger.c 
b/src/messenger/gnunet-service-messenger.c
index 989157ceb..a994e16ee 100644
--- a/src/messenger/gnunet-service-messenger.c
+++ b/src/messenger/gnunet-service-messenger.c
@@ -227,10 +227,10 @@ check_for_message:
   if (GNUNET_YES != decode_message (&message, msg_length, msg_buffer, 
GNUNET_NO, NULL))
     return GNUNET_NO;
 
-  if (GNUNET_YES != filter_message_sending(&message))
-    return GNUNET_NO;
+  const int allowed = filter_message_sending(&message);
 
-  return GNUNET_OK;
+  cleanup_message(&message);
+  return GNUNET_YES == allowed? GNUNET_OK : GNUNET_NO;
 }
 
 static void
@@ -278,6 +278,8 @@ handle_send_message (void *cls,
                GNUNET_MESSENGER_name_of_kind (message.header.kind), GNUNET_h2s 
(key));
 
 end_handling:
+  cleanup_message(&message);
+
   GNUNET_SERVICE_client_continue (msg_client->client);
 }
 
diff --git a/src/messenger/gnunet-service-messenger_tunnel.c 
b/src/messenger/gnunet-service-messenger_tunnel.c
index fdd6429e6..c21f298b3 100644
--- a/src/messenger/gnunet-service-messenger_tunnel.c
+++ b/src/messenger/gnunet-service-messenger_tunnel.c
@@ -176,6 +176,9 @@ handle_tunnel_message (void *cls, const struct 
GNUNET_MessageHeader *header)
 {
   struct GNUNET_MESSENGER_SrvTunnel *tunnel = cls;
 
+  if (!tunnel)
+    return;
+
   const uint16_t length = ntohs (header->size) - sizeof(*header);
   const char *buffer = (const char*) &header[1];
 
@@ -190,9 +193,6 @@ handle_tunnel_message (void *cls, const struct 
GNUNET_MessageHeader *header)
   GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Got message of kind: %s!\n",
              GNUNET_MESSENGER_name_of_kind(message.header.kind));
 
-  if (!tunnel)
-    return;
-
   const int new_message = update_room_message (
       tunnel->room, copy_message (&message), &hash
   );
@@ -226,6 +226,8 @@ handle_tunnel_message (void *cls, const struct 
GNUNET_MessageHeader *header)
   }
 
 receive_done:
+  cleanup_message(&message);
+
   GNUNET_CADET_receive_done (tunnel->channel);
 }
 
diff --git a/src/messenger/messenger_api.c b/src/messenger/messenger_api.c
index ef6244e19..c9b143662 100644
--- a/src/messenger/messenger_api.c
+++ b/src/messenger/messenger_api.c
@@ -214,6 +214,7 @@ check_recv_message (void *cls,
   if (GNUNET_YES != decode_message (&message, length, buffer, GNUNET_YES, 
NULL))
     return GNUNET_NO;
 
+  cleanup_message(&message);
   return GNUNET_OK;
 }
 
@@ -259,6 +260,8 @@ handle_recv_message (void *cls,
   }
   else
     GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Room not found\n");
+
+  cleanup_message(&message);
 }
 
 static void
diff --git a/src/messenger/messenger_api_message.c 
b/src/messenger/messenger_api_message.c
index 05bf654fb..4e64cc22f 100644
--- a/src/messenger/messenger_api_message.c
+++ b/src/messenger/messenger_api_message.c
@@ -125,6 +125,14 @@ destroy_message_body (enum GNUNET_MESSENGER_MessageKind 
kind,
   }
 }
 
+void
+cleanup_message (struct GNUNET_MESSENGER_Message *message)
+{
+  GNUNET_assert(message);
+
+  destroy_message_body (message->header.kind, &(message->body));
+}
+
 void
 destroy_message (struct GNUNET_MESSENGER_Message *message)
 {
diff --git a/src/messenger/messenger_api_message.h 
b/src/messenger/messenger_api_message.h
index 6aebf4014..21161c134 100644
--- a/src/messenger/messenger_api_message.h
+++ b/src/messenger/messenger_api_message.h
@@ -61,6 +61,14 @@ create_message (enum GNUNET_MESSENGER_MessageKind kind);
 struct GNUNET_MESSENGER_Message*
 copy_message (const struct GNUNET_MESSENGER_Message *message);
 
+/**
+ * Frees the messages body memory.
+ *
+ * @param[in/out] message Message
+ */
+void
+cleanup_message (struct GNUNET_MESSENGER_Message *message);
+
 /**
  * Destroys a message and frees its memory fully.
  *

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]