aboutsummaryrefslogtreecommitdiff
path: root/src/messenger
diff options
context:
space:
mode:
authorTheJackiMonster <thejackimonster@gmail.com>2021-11-22 14:45:56 +0100
committerTheJackiMonster <thejackimonster@gmail.com>2021-11-22 14:45:56 +0100
commitb57f92ee938794a862c93c3dcc5cd47f061c4cb4 (patch)
tree3b153dfe620ae4cf32ebaf9a1ffbf896ef8f7b8a /src/messenger
parent0bca602d06bfeeb961919d971d7d25d8010ab5f2 (diff)
downloadgnunet-b57f92ee938794a862c93c3dcc5cd47f061c4cb4.tar.gz
gnunet-b57f92ee938794a862c93c3dcc5cd47f061c4cb4.zip
-fixed problem of uninitialized memory by not using it
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
Diffstat (limited to 'src/messenger')
-rw-r--r--src/messenger/gnunet-messenger.c2
-rw-r--r--src/messenger/gnunet-service-messenger.c2
-rw-r--r--src/messenger/gnunet-service-messenger_message_store.c2
-rw-r--r--src/messenger/gnunet-service-messenger_tunnel.c2
-rw-r--r--src/messenger/messenger_api.c2
-rw-r--r--src/messenger/messenger_api_message.c59
-rw-r--r--src/messenger/messenger_api_message.h15
7 files changed, 51 insertions, 33 deletions
diff --git a/src/messenger/gnunet-messenger.c b/src/messenger/gnunet-messenger.c
index 0d23a225b..e2d106be8 100644
--- a/src/messenger/gnunet-messenger.c
+++ b/src/messenger/gnunet-messenger.c
@@ -170,7 +170,6 @@ read_stdio (void *cls)
170 struct GNUNET_MESSENGER_Room *room = cls; 170 struct GNUNET_MESSENGER_Room *room = cls;
171 171
172 struct GNUNET_MESSENGER_Message message; 172 struct GNUNET_MESSENGER_Message message;
173 memset(&message, 0, sizeof(message));
174 message.header.kind = GNUNET_MESSENGER_KIND_TEXT; 173 message.header.kind = GNUNET_MESSENGER_KIND_TEXT;
175 message.body.text.text = buffer; 174 message.body.text.text = buffer;
176 175
@@ -278,7 +277,6 @@ on_identity (void *cls,
278 else 277 else
279 { 278 {
280 struct GNUNET_MESSENGER_Message message; 279 struct GNUNET_MESSENGER_Message message;
281 memset(&message, 0, sizeof(message));
282 message.header.kind = GNUNET_MESSENGER_KIND_NAME; 280 message.header.kind = GNUNET_MESSENGER_KIND_NAME;
283 message.body.name.name = GNUNET_strdup(name); 281 message.body.name.name = GNUNET_strdup(name);
284 282
diff --git a/src/messenger/gnunet-service-messenger.c b/src/messenger/gnunet-service-messenger.c
index 67a8b16e3..546f4c0d2 100644
--- a/src/messenger/gnunet-service-messenger.c
+++ b/src/messenger/gnunet-service-messenger.c
@@ -221,7 +221,7 @@ check_for_message:
221 221
222 struct GNUNET_MESSENGER_Message message; 222 struct GNUNET_MESSENGER_Message message;
223 223
224 if (length < get_message_kind_size(GNUNET_MESSENGER_KIND_UNKNOWN)) 224 if (length < get_message_kind_size(GNUNET_MESSENGER_KIND_UNKNOWN, GNUNET_NO))
225 return GNUNET_NO; 225 return GNUNET_NO;
226 226
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))
diff --git a/src/messenger/gnunet-service-messenger_message_store.c b/src/messenger/gnunet-service-messenger_message_store.c
index 56448997a..ce20ac924 100644
--- a/src/messenger/gnunet-service-messenger_message_store.c
+++ b/src/messenger/gnunet-service-messenger_message_store.c
@@ -427,7 +427,7 @@ get_store_message (struct GNUNET_MESSENGER_MessageStore *store,
427 return NULL; 427 return NULL;
428 428
429 if ((GNUNET_DISK_file_read (store->storage_messages, buffer, entry->length) != entry->length) || 429 if ((GNUNET_DISK_file_read (store->storage_messages, buffer, entry->length) != entry->length) ||
430 (entry->length < get_message_kind_size(GNUNET_MESSENGER_KIND_UNKNOWN))) 430 (entry->length < get_message_kind_size(GNUNET_MESSENGER_KIND_UNKNOWN, GNUNET_YES)))
431 goto free_buffer; 431 goto free_buffer;
432 432
433 message = create_message (GNUNET_MESSENGER_KIND_UNKNOWN); 433 message = create_message (GNUNET_MESSENGER_KIND_UNKNOWN);
diff --git a/src/messenger/gnunet-service-messenger_tunnel.c b/src/messenger/gnunet-service-messenger_tunnel.c
index c21f298b3..45c10c1af 100644
--- a/src/messenger/gnunet-service-messenger_tunnel.c
+++ b/src/messenger/gnunet-service-messenger_tunnel.c
@@ -122,7 +122,7 @@ check_tunnel_message (void *cls,
122 122
123 struct GNUNET_MESSENGER_Message message; 123 struct GNUNET_MESSENGER_Message message;
124 124
125 if (length < get_message_kind_size(GNUNET_MESSENGER_KIND_UNKNOWN)) 125 if (length < get_message_kind_size(GNUNET_MESSENGER_KIND_UNKNOWN, GNUNET_YES))
126 { 126 {
127 GNUNET_log(GNUNET_ERROR_TYPE_WARNING, "Tunnel error: Message too short! (%d)\n", length); 127 GNUNET_log(GNUNET_ERROR_TYPE_WARNING, "Tunnel error: Message too short! (%d)\n", length);
128 return GNUNET_SYSERR; 128 return GNUNET_SYSERR;
diff --git a/src/messenger/messenger_api.c b/src/messenger/messenger_api.c
index 81a02e858..2db841315 100644
--- a/src/messenger/messenger_api.c
+++ b/src/messenger/messenger_api.c
@@ -208,7 +208,7 @@ check_recv_message (void *cls,
208 208
209 struct GNUNET_MESSENGER_Message message; 209 struct GNUNET_MESSENGER_Message message;
210 210
211 if (length < get_message_kind_size(GNUNET_MESSENGER_KIND_UNKNOWN)) 211 if (length < get_message_kind_size(GNUNET_MESSENGER_KIND_UNKNOWN, GNUNET_YES))
212 return GNUNET_NO; 212 return GNUNET_NO;
213 213
214 if (GNUNET_YES != decode_message (&message, length, buffer, GNUNET_YES, NULL)) 214 if (GNUNET_YES != decode_message (&message, length, buffer, GNUNET_YES, NULL))
diff --git a/src/messenger/messenger_api_message.c b/src/messenger/messenger_api_message.c
index 4e64cc22f..496c98dbf 100644
--- a/src/messenger/messenger_api_message.c
+++ b/src/messenger/messenger_api_message.c
@@ -229,13 +229,18 @@ get_message_body_kind_size (enum GNUNET_MESSENGER_MessageKind kind)
229typedef uint32_t kind_t; 229typedef uint32_t kind_t;
230 230
231uint16_t 231uint16_t
232get_message_kind_size (enum GNUNET_MESSENGER_MessageKind kind) 232get_message_kind_size (enum GNUNET_MESSENGER_MessageKind kind,
233 int include_header)
233{ 234{
234 uint16_t length = 0; 235 uint16_t length = 0;
235 236
236 length += member_size(struct GNUNET_MESSENGER_Message, header.timestamp); 237 if (GNUNET_YES == include_header)
237 length += member_size(struct GNUNET_MESSENGER_Message, header.sender_id); 238 {
238 length += member_size(struct GNUNET_MESSENGER_Message, header.previous); 239 length += member_size(struct GNUNET_MESSENGER_Message, header.timestamp);
240 length += member_size(struct GNUNET_MESSENGER_Message, header.sender_id);
241 length += member_size(struct GNUNET_MESSENGER_Message, header.previous);
242 }
243
239 length += sizeof(kind_t); 244 length += sizeof(kind_t);
240 245
241 return length + get_message_body_kind_size (kind); 246 return length + get_message_body_kind_size (kind);
@@ -279,16 +284,16 @@ get_message_body_size (enum GNUNET_MESSENGER_MessageKind kind,
279 284
280uint16_t 285uint16_t
281get_message_size (const struct GNUNET_MESSENGER_Message *message, 286get_message_size (const struct GNUNET_MESSENGER_Message *message,
282 int include_signature) 287 int include_header)
283{ 288{
284 GNUNET_assert(message); 289 GNUNET_assert(message);
285 290
286 uint16_t length = 0; 291 uint16_t length = 0;
287 292
288 if (GNUNET_YES == include_signature) 293 if (GNUNET_YES == include_header)
289 length += GNUNET_IDENTITY_signature_get_length(&(message->header.signature)); 294 length += GNUNET_IDENTITY_signature_get_length(&(message->header.signature));
290 295
291 length += get_message_kind_size (message->header.kind); 296 length += get_message_kind_size (message->header.kind, include_header);
292 length += get_message_body_size (message->header.kind, &(message->body)); 297 length += get_message_body_size (message->header.kind, &(message->body));
293 298
294 return length; 299 return length;
@@ -314,7 +319,7 @@ calc_usual_padding ()
314 uint16_t kind_size; 319 uint16_t kind_size;
315 320
316 for (int i = 0; i <= GNUNET_MESSENGER_KIND_MAX; i++) { 321 for (int i = 0; i <= GNUNET_MESSENGER_KIND_MAX; i++) {
317 kind_size = get_message_kind_size ((enum GNUNET_MESSENGER_MessageKind) i); 322 kind_size = get_message_kind_size ((enum GNUNET_MESSENGER_MessageKind) i, GNUNET_YES);
318 323
319 if (kind_size > padding) 324 if (kind_size > padding)
320 padding = kind_size; 325 padding = kind_size;
@@ -464,20 +469,24 @@ void
464encode_message (const struct GNUNET_MESSENGER_Message *message, 469encode_message (const struct GNUNET_MESSENGER_Message *message,
465 uint16_t length, 470 uint16_t length,
466 char *buffer, 471 char *buffer,
467 int include_signature) 472 int include_header)
468{ 473{
469 GNUNET_assert((message) && (buffer)); 474 GNUNET_assert((message) && (buffer));
470 475
471 uint16_t offset = 0; 476 uint16_t offset = 0;
472 477
473 if (GNUNET_YES == include_signature) 478 if (GNUNET_YES == include_header)
474 encode_step_signature(buffer, offset, &(message->header.signature), length); 479 encode_step_signature(buffer, offset, &(message->header.signature), length);
475 480
476 const kind_t kind = GNUNET_htobe32((kind_t) message->header.kind); 481 const kind_t kind = GNUNET_htobe32((kind_t) message->header.kind);
477 482
478 encode_step(buffer, offset, &(message->header.timestamp)); 483 if (GNUNET_YES == include_header)
479 encode_step(buffer, offset, &(message->header.sender_id)); 484 {
480 encode_step(buffer, offset, &(message->header.previous)); 485 encode_step(buffer, offset, &(message->header.timestamp));
486 encode_step(buffer, offset, &(message->header.sender_id));
487 encode_step(buffer, offset, &(message->header.previous));
488 }
489
481 encode_step(buffer, offset, &kind); 490 encode_step(buffer, offset, &kind);
482 491
483 encode_message_body (message->header.kind, &(message->body), length, buffer, offset); 492 encode_message_body (message->header.kind, &(message->body), length, buffer, offset);
@@ -619,14 +628,18 @@ int
619decode_message (struct GNUNET_MESSENGER_Message *message, 628decode_message (struct GNUNET_MESSENGER_Message *message,
620 uint16_t length, 629 uint16_t length,
621 const char *buffer, 630 const char *buffer,
622 int include_signature, 631 int include_header,
623 uint16_t *padding) 632 uint16_t *padding)
624{ 633{
625 GNUNET_assert((message) && (buffer) && (length >= get_message_kind_size(GNUNET_MESSENGER_KIND_UNKNOWN))); 634 GNUNET_assert(
635 (message) &&
636 (buffer) &&
637 (length >= get_message_kind_size(GNUNET_MESSENGER_KIND_UNKNOWN, include_header))
638 );
626 639
627 uint16_t offset = 0; 640 uint16_t offset = 0;
628 641
629 if (GNUNET_YES == include_signature) 642 if (GNUNET_YES == include_header)
630 { 643 {
631 ssize_t result = GNUNET_IDENTITY_read_signature_from_buffer( 644 ssize_t result = GNUNET_IDENTITY_read_signature_from_buffer(
632 &(message->header.signature), buffer, length - offset 645 &(message->header.signature), buffer, length - offset
@@ -640,19 +653,23 @@ decode_message (struct GNUNET_MESSENGER_Message *message,
640 653
641 const uint16_t count = length - offset; 654 const uint16_t count = length - offset;
642 655
643 if (count < get_message_kind_size (GNUNET_MESSENGER_KIND_UNKNOWN)) 656 if (count < get_message_kind_size (GNUNET_MESSENGER_KIND_UNKNOWN, include_header))
644 return GNUNET_NO; 657 return GNUNET_NO;
645 658
646 kind_t kind; 659 kind_t kind;
647 660
648 decode_step(buffer, offset, &(message->header.timestamp)); 661 if (GNUNET_YES == include_header)
649 decode_step(buffer, offset, &(message->header.sender_id)); 662 {
650 decode_step(buffer, offset, &(message->header.previous)); 663 decode_step(buffer, offset, &(message->header.timestamp));
664 decode_step(buffer, offset, &(message->header.sender_id));
665 decode_step(buffer, offset, &(message->header.previous));
666 }
667
651 decode_step(buffer, offset, &kind); 668 decode_step(buffer, offset, &kind);
652 669
653 message->header.kind = (enum GNUNET_MESSENGER_MessageKind) GNUNET_be32toh(kind); 670 message->header.kind = (enum GNUNET_MESSENGER_MessageKind) GNUNET_be32toh(kind);
654 671
655 if (count < get_message_kind_size (message->header.kind)) 672 if (count < get_message_kind_size (message->header.kind, include_header))
656 return GNUNET_NO; 673 return GNUNET_NO;
657 674
658 const uint16_t result = decode_message_body (&(message->header.kind), &(message->body), length, buffer, offset); 675 const uint16_t result = decode_message_body (&(message->header.kind), &(message->body), length, buffer, offset);
diff --git a/src/messenger/messenger_api_message.h b/src/messenger/messenger_api_message.h
index 21161c134..46c5cb024 100644
--- a/src/messenger/messenger_api_message.h
+++ b/src/messenger/messenger_api_message.h
@@ -90,21 +90,23 @@ is_message_session_bound (const struct GNUNET_MESSENGER_Message *message);
90 * Returns the minimal size in bytes to encode a message of a specific <i>kind</i>. 90 * Returns the minimal size in bytes to encode a message of a specific <i>kind</i>.
91 * 91 *
92 * @param[in] kind Kind of message 92 * @param[in] kind Kind of message
93 * @param[in] include_header Flag to include header
93 * @return Minimal size to encode 94 * @return Minimal size to encode
94 */ 95 */
95uint16_t 96uint16_t
96get_message_kind_size (enum GNUNET_MESSENGER_MessageKind kind); 97get_message_kind_size (enum GNUNET_MESSENGER_MessageKind kind,
98 int include_header);
97 99
98/** 100/**
99 * Returns the exact size in bytes to encode a given <i>message</i>. 101 * Returns the exact size in bytes to encode a given <i>message</i>.
100 * 102 *
101 * @param[in] message Message 103 * @param[in] message Message
102 * @param[in] encode_signature Flag to include signature 104 * @param[in] include_header Flag to include header
103 * @return Size to encode 105 * @return Size to encode
104 */ 106 */
105uint16_t 107uint16_t
106get_message_size (const struct GNUNET_MESSENGER_Message *message, 108get_message_size (const struct GNUNET_MESSENGER_Message *message,
107 int include_signature); 109 int include_header);
108 110
109/** 111/**
110 * Encodes a given <i>message</i> into a <i>buffer</i> of a maximal <i>length</i> in bytes. 112 * Encodes a given <i>message</i> into a <i>buffer</i> of a maximal <i>length</i> in bytes.
@@ -112,13 +114,13 @@ get_message_size (const struct GNUNET_MESSENGER_Message *message,
112 * @param[in] message Message 114 * @param[in] message Message
113 * @param[in] length Maximal length to encode 115 * @param[in] length Maximal length to encode
114 * @param[out] buffer Buffer 116 * @param[out] buffer Buffer
115 * @param[in] encode_signature Flag to include signature 117 * @param[in] include_header Flag to include header
116 */ 118 */
117void 119void
118encode_message (const struct GNUNET_MESSENGER_Message *message, 120encode_message (const struct GNUNET_MESSENGER_Message *message,
119 uint16_t length, 121 uint16_t length,
120 char *buffer, 122 char *buffer,
121 int include_signature); 123 int include_header);
122 124
123/** 125/**
124 * Decodes a <i>message</i> from a given <i>buffer</i> of a maximal <i>length</i> in bytes. 126 * Decodes a <i>message</i> from a given <i>buffer</i> of a maximal <i>length</i> in bytes.
@@ -131,6 +133,7 @@ encode_message (const struct GNUNET_MESSENGER_Message *message,
131 * @param[out] message Message 133 * @param[out] message Message
132 * @param[in] length Maximal length to decode 134 * @param[in] length Maximal length to decode
133 * @param[in] buffer Buffer 135 * @param[in] buffer Buffer
136 * @param[in] include_header Flag to include header
134 * @param[out] padding Padding 137 * @param[out] padding Padding
135 * @return #GNUNET_YES on success, otherwise #GNUNET_NO 138 * @return #GNUNET_YES on success, otherwise #GNUNET_NO
136 */ 139 */
@@ -138,7 +141,7 @@ int
138decode_message (struct GNUNET_MESSENGER_Message *message, 141decode_message (struct GNUNET_MESSENGER_Message *message,
139 uint16_t length, 142 uint16_t length,
140 const char *buffer, 143 const char *buffer,
141 int include_signature, 144 int include_header,
142 uint16_t *padding); 145 uint16_t *padding);
143 146
144/** 147/**