aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTheJackiMonster <thejackimonster@gmail.com>2021-11-15 11:18:39 +0100
committerTheJackiMonster <thejackimonster@gmail.com>2021-11-15 11:18:39 +0100
commit84a1ac1baf0cdec49a2600f1872337612233ed01 (patch)
treec576494898964493219b13f833debeea966db012
parent72d1c2620982a253ad5450d18cc79b3a2b7f21af (diff)
downloadgnunet-84a1ac1baf0cdec49a2600f1872337612233ed01.tar.gz
gnunet-84a1ac1baf0cdec49a2600f1872337612233ed01.zip
-fixes memory leaks with message body decoding
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-rw-r--r--src/messenger/gnunet-service-messenger.c8
-rw-r--r--src/messenger/gnunet-service-messenger_tunnel.c8
-rw-r--r--src/messenger/messenger_api.c3
-rw-r--r--src/messenger/messenger_api_message.c8
-rw-r--r--src/messenger/messenger_api_message.h8
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:
227 if (GNUNET_YES != decode_message (&message, msg_length, msg_buffer, GNUNET_NO, NULL)) 227 if (GNUNET_YES != decode_message (&message, msg_length, msg_buffer, GNUNET_NO, NULL))
228 return GNUNET_NO; 228 return GNUNET_NO;
229 229
230 if (GNUNET_YES != filter_message_sending(&message)) 230 const int allowed = filter_message_sending(&message);
231 return GNUNET_NO;
232 231
233 return GNUNET_OK; 232 cleanup_message(&message);
233 return GNUNET_YES == allowed? GNUNET_OK : GNUNET_NO;
234} 234}
235 235
236static void 236static void
@@ -278,6 +278,8 @@ handle_send_message (void *cls,
278 GNUNET_MESSENGER_name_of_kind (message.header.kind), GNUNET_h2s (key)); 278 GNUNET_MESSENGER_name_of_kind (message.header.kind), GNUNET_h2s (key));
279 279
280end_handling: 280end_handling:
281 cleanup_message(&message);
282
281 GNUNET_SERVICE_client_continue (msg_client->client); 283 GNUNET_SERVICE_client_continue (msg_client->client);
282} 284}
283 285
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)
176{ 176{
177 struct GNUNET_MESSENGER_SrvTunnel *tunnel = cls; 177 struct GNUNET_MESSENGER_SrvTunnel *tunnel = cls;
178 178
179 if (!tunnel)
180 return;
181
179 const uint16_t length = ntohs (header->size) - sizeof(*header); 182 const uint16_t length = ntohs (header->size) - sizeof(*header);
180 const char *buffer = (const char*) &header[1]; 183 const char *buffer = (const char*) &header[1];
181 184
@@ -190,9 +193,6 @@ handle_tunnel_message (void *cls, const struct GNUNET_MessageHeader *header)
190 GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Got message of kind: %s!\n", 193 GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Got message of kind: %s!\n",
191 GNUNET_MESSENGER_name_of_kind(message.header.kind)); 194 GNUNET_MESSENGER_name_of_kind(message.header.kind));
192 195
193 if (!tunnel)
194 return;
195
196 const int new_message = update_room_message ( 196 const int new_message = update_room_message (
197 tunnel->room, copy_message (&message), &hash 197 tunnel->room, copy_message (&message), &hash
198 ); 198 );
@@ -226,6 +226,8 @@ handle_tunnel_message (void *cls, const struct GNUNET_MessageHeader *header)
226 } 226 }
227 227
228receive_done: 228receive_done:
229 cleanup_message(&message);
230
229 GNUNET_CADET_receive_done (tunnel->channel); 231 GNUNET_CADET_receive_done (tunnel->channel);
230} 232}
231 233
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,
214 if (GNUNET_YES != decode_message (&message, length, buffer, GNUNET_YES, NULL)) 214 if (GNUNET_YES != decode_message (&message, length, buffer, GNUNET_YES, NULL))
215 return GNUNET_NO; 215 return GNUNET_NO;
216 216
217 cleanup_message(&message);
217 return GNUNET_OK; 218 return GNUNET_OK;
218} 219}
219 220
@@ -259,6 +260,8 @@ handle_recv_message (void *cls,
259 } 260 }
260 else 261 else
261 GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Room not found\n"); 262 GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Room not found\n");
263
264 cleanup_message(&message);
262} 265}
263 266
264static void 267static 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
@@ -126,6 +126,14 @@ destroy_message_body (enum GNUNET_MESSENGER_MessageKind kind,
126} 126}
127 127
128void 128void
129cleanup_message (struct GNUNET_MESSENGER_Message *message)
130{
131 GNUNET_assert(message);
132
133 destroy_message_body (message->header.kind, &(message->body));
134}
135
136void
129destroy_message (struct GNUNET_MESSENGER_Message *message) 137destroy_message (struct GNUNET_MESSENGER_Message *message)
130{ 138{
131 GNUNET_assert(message); 139 GNUNET_assert(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
@@ -62,6 +62,14 @@ struct GNUNET_MESSENGER_Message*
62copy_message (const struct GNUNET_MESSENGER_Message *message); 62copy_message (const struct GNUNET_MESSENGER_Message *message);
63 63
64/** 64/**
65 * Frees the messages body memory.
66 *
67 * @param[in/out] message Message
68 */
69void
70cleanup_message (struct GNUNET_MESSENGER_Message *message);
71
72/**
65 * Destroys a message and frees its memory fully. 73 * Destroys a message and frees its memory fully.
66 * 74 *
67 * @param[in/out] message Message 75 * @param[in/out] message Message