diff options
author | TheJackiMonster <thejackimonster@gmail.com> | 2021-11-15 11:18:39 +0100 |
---|---|---|
committer | TheJackiMonster <thejackimonster@gmail.com> | 2021-11-15 11:18:39 +0100 |
commit | 84a1ac1baf0cdec49a2600f1872337612233ed01 (patch) | |
tree | c576494898964493219b13f833debeea966db012 | |
parent | 72d1c2620982a253ad5450d18cc79b3a2b7f21af (diff) | |
download | gnunet-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.c | 8 | ||||
-rw-r--r-- | src/messenger/gnunet-service-messenger_tunnel.c | 8 | ||||
-rw-r--r-- | src/messenger/messenger_api.c | 3 | ||||
-rw-r--r-- | src/messenger/messenger_api_message.c | 8 | ||||
-rw-r--r-- | 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: | |||
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 | ||
236 | static void | 236 | static 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 | ||
280 | end_handling: | 280 | end_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 | ||
228 | receive_done: | 228 | receive_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 | ||
264 | static void | 267 | 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 | |||
@@ -126,6 +126,14 @@ destroy_message_body (enum GNUNET_MESSENGER_MessageKind kind, | |||
126 | } | 126 | } |
127 | 127 | ||
128 | void | 128 | void |
129 | cleanup_message (struct GNUNET_MESSENGER_Message *message) | ||
130 | { | ||
131 | GNUNET_assert(message); | ||
132 | |||
133 | destroy_message_body (message->header.kind, &(message->body)); | ||
134 | } | ||
135 | |||
136 | void | ||
129 | destroy_message (struct GNUNET_MESSENGER_Message *message) | 137 | destroy_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* | |||
62 | copy_message (const struct GNUNET_MESSENGER_Message *message); | 62 | copy_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 | */ | ||
69 | void | ||
70 | cleanup_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 |