aboutsummaryrefslogtreecommitdiff
path: root/src/messenger/messenger_api_message.c
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/messenger_api_message.c
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/messenger_api_message.c')
-rw-r--r--src/messenger/messenger_api_message.c59
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)
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);