diff options
author | TheJackiMonster <thejackimonster@gmail.com> | 2021-11-22 14:45:56 +0100 |
---|---|---|
committer | TheJackiMonster <thejackimonster@gmail.com> | 2021-11-22 14:45:56 +0100 |
commit | b57f92ee938794a862c93c3dcc5cd47f061c4cb4 (patch) | |
tree | 3b153dfe620ae4cf32ebaf9a1ffbf896ef8f7b8a /src | |
parent | 0bca602d06bfeeb961919d971d7d25d8010ab5f2 (diff) | |
download | gnunet-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')
-rw-r--r-- | src/messenger/gnunet-messenger.c | 2 | ||||
-rw-r--r-- | src/messenger/gnunet-service-messenger.c | 2 | ||||
-rw-r--r-- | src/messenger/gnunet-service-messenger_message_store.c | 2 | ||||
-rw-r--r-- | src/messenger/gnunet-service-messenger_tunnel.c | 2 | ||||
-rw-r--r-- | src/messenger/messenger_api.c | 2 | ||||
-rw-r--r-- | src/messenger/messenger_api_message.c | 59 | ||||
-rw-r--r-- | src/messenger/messenger_api_message.h | 15 |
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) | |||
229 | typedef uint32_t kind_t; | 229 | typedef uint32_t kind_t; |
230 | 230 | ||
231 | uint16_t | 231 | uint16_t |
232 | get_message_kind_size (enum GNUNET_MESSENGER_MessageKind kind) | 232 | get_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 | ||
280 | uint16_t | 285 | uint16_t |
281 | get_message_size (const struct GNUNET_MESSENGER_Message *message, | 286 | get_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 | |||
464 | encode_message (const struct GNUNET_MESSENGER_Message *message, | 469 | encode_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 | |||
619 | decode_message (struct GNUNET_MESSENGER_Message *message, | 628 | decode_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 | */ |
95 | uint16_t | 96 | uint16_t |
96 | get_message_kind_size (enum GNUNET_MESSENGER_MessageKind kind); | 97 | get_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 | */ |
105 | uint16_t | 107 | uint16_t |
106 | get_message_size (const struct GNUNET_MESSENGER_Message *message, | 108 | get_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 | */ |
117 | void | 119 | void |
118 | encode_message (const struct GNUNET_MESSENGER_Message *message, | 120 | encode_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 | |||
138 | decode_message (struct GNUNET_MESSENGER_Message *message, | 141 | decode_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 | /** |