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/messenger/messenger_api_message.c | |
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/messenger/messenger_api_message.c')
-rw-r--r-- | src/messenger/messenger_api_message.c | 59 |
1 files changed, 38 insertions, 21 deletions
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); |