gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gnunet] branch master updated: -fix messenger load-, store-operations a


From: gnunet
Subject: [gnunet] branch master updated: -fix messenger load-, store-operations and uninitialized memory
Date: Mon, 29 Nov 2021 12:43:33 +0100

This is an automated email from the git hooks/post-receive script.

thejackimonster pushed a commit to branch master
in repository gnunet.

The following commit(s) were added to refs/heads/master by this push:
     new f8beb38c5 -fix messenger load-, store-operations and uninitialized 
memory
f8beb38c5 is described below

commit f8beb38c5e813ace4799cef75232f6e5c6b3a67b
Author: TheJackiMonster <thejackimonster@gmail.com>
AuthorDate: Mon Nov 29 12:43:25 2021 +0100

    -fix messenger load-, store-operations and uninitialized memory
    
    Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
---
 src/messenger/gnunet-service-messenger_handle.c    |  8 ++-
 src/messenger/gnunet-service-messenger_member.c    |  4 ++
 .../gnunet-service-messenger_member_session.c      |  6 ++
 .../gnunet-service-messenger_message_store.c       | 67 +++++++++++++---------
 src/messenger/gnunet-service-messenger_operation.c |  4 ++
 .../gnunet-service-messenger_operation_store.c     | 34 +++++------
 src/messenger/gnunet-service-messenger_room.c      |  4 --
 src/messenger/messenger_api.c                      |  2 +-
 8 files changed, 79 insertions(+), 50 deletions(-)

diff --git a/src/messenger/gnunet-service-messenger_handle.c 
b/src/messenger/gnunet-service-messenger_handle.c
index fa6830697..341bb7251 100644
--- a/src/messenger/gnunet-service-messenger_handle.c
+++ b/src/messenger/gnunet-service-messenger_handle.c
@@ -598,6 +598,11 @@ callback_scan_for_rooms (void *cls,
 {
   struct GNUNET_MESSENGER_SrvHandle *handle = cls;
 
+  if ((strlen(filename) <= 4) || (0 != strcmp(filename + strlen(filename) - 4, 
".cfg")))
+    return GNUNET_OK;
+
+  GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Load room configuration of handle: 
%s\n", filename);
+
   struct GNUNET_CONFIGURATION_Handle *cfg = GNUNET_CONFIGURATION_create ();
 
   if ((GNUNET_YES == GNUNET_DISK_file_test (filename)) && (GNUNET_OK == 
GNUNET_CONFIGURATION_parse (cfg, filename)))
@@ -649,9 +654,10 @@ iterate_save_rooms (void *cls,
 
   char *filename;
   GNUNET_asprintf (&filename, "%s%s%c%s.cfg", id_dir, "rooms", DIR_SEPARATOR, 
GNUNET_h2s (key));
-
   GNUNET_free(id_dir);
 
+  GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Save room configuration of handle: 
%s\n", filename);
+
   struct GNUNET_CONFIGURATION_Handle *cfg = GNUNET_CONFIGURATION_create ();
 
   char *key_data = GNUNET_STRINGS_data_to_string_alloc (key, sizeof(*key));
diff --git a/src/messenger/gnunet-service-messenger_member.c 
b/src/messenger/gnunet-service-messenger_member.c
index def57aef9..976b68fe6 100644
--- a/src/messenger/gnunet-service-messenger_member.c
+++ b/src/messenger/gnunet-service-messenger_member.c
@@ -112,6 +112,8 @@ load_member (struct GNUNET_MESSENGER_MemberStore *store,
   if (GNUNET_YES != GNUNET_DISK_file_test (config_file))
     goto free_config;
 
+  GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Load member configuration: %s\n", 
config_file);
+
   struct GNUNET_CONFIGURATION_Handle *cfg = GNUNET_CONFIGURATION_create ();
 
   if (GNUNET_OK == GNUNET_CONFIGURATION_parse (cfg, config_file))
@@ -205,6 +207,8 @@ save_member (struct GNUNET_MESSENGER_Member *member,
   char *config_file;
   GNUNET_asprintf (&config_file, "%s%s", directory, "member.cfg");
 
+  GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Save member configuration: %s\n", 
config_file);
+
   struct GNUNET_CONFIGURATION_Handle *cfg = GNUNET_CONFIGURATION_create ();
 
   char *id_data = GNUNET_STRINGS_data_to_string_alloc (&(member->id), 
sizeof(member->id));
diff --git a/src/messenger/gnunet-service-messenger_member_session.c 
b/src/messenger/gnunet-service-messenger_member_session.c
index 03736941f..846dbbe2b 100644
--- a/src/messenger/gnunet-service-messenger_member_session.c
+++ b/src/messenger/gnunet-service-messenger_member_session.c
@@ -518,6 +518,8 @@ load_member_session (struct GNUNET_MESSENGER_Member *member,
   if (GNUNET_YES != GNUNET_DISK_file_test (config_file))
     goto free_config;
 
+  GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Load session configuration of member: 
%s\n", config_file);
+
   struct GNUNET_CONFIGURATION_Handle *cfg = GNUNET_CONFIGURATION_create ();
 
   if (GNUNET_OK == GNUNET_CONFIGURATION_parse (cfg, config_file))
@@ -605,6 +607,8 @@ load_member_session_next (struct 
GNUNET_MESSENGER_MemberSession *session,
   if (GNUNET_YES != GNUNET_DISK_file_test (config_file))
     goto free_config;
 
+  GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Load next session configuration of 
member: %s\n", config_file);
+
   struct GNUNET_CONFIGURATION_Handle *cfg = GNUNET_CONFIGURATION_create ();
 
   if (GNUNET_OK == GNUNET_CONFIGURATION_parse (cfg, config_file))
@@ -695,6 +699,8 @@ save_member_session (struct GNUNET_MESSENGER_MemberSession 
*session,
   char *config_file;
   GNUNET_asprintf (&config_file, "%s%s", directory, "session.cfg");
 
+  GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Save session configuration of member: 
%s\n", config_file);
+
   struct GNUNET_CONFIGURATION_Handle *cfg = GNUNET_CONFIGURATION_create ();
 
   char *key_data = 
GNUNET_IDENTITY_public_key_to_string(get_member_session_public_key(session));
diff --git a/src/messenger/gnunet-service-messenger_message_store.c 
b/src/messenger/gnunet-service-messenger_message_store.c
index ce20ac924..ddad266ad 100644
--- a/src/messenger/gnunet-service-messenger_message_store.c
+++ b/src/messenger/gnunet-service-messenger_message_store.c
@@ -104,6 +104,12 @@ struct GNUNET_MESSENGER_MessageEntryStorage
   struct GNUNET_MESSENGER_MessageEntry entry;
 };
 
+#define load_message_store_attribute_failed(file, attribute) \
+  sizeof(attribute) != GNUNET_DISK_file_read(file, &(attribute), 
sizeof(attribute))
+
+#define save_message_store_attribute_failed(file, attribute) \
+  sizeof(attribute) != GNUNET_DISK_file_write(file, &(attribute), 
sizeof(attribute))
+
 static void
 load_message_store_entries (struct GNUNET_MESSENGER_MessageStore *store,
                             const char *filename)
@@ -118,31 +124,34 @@ load_message_store_entries (struct 
GNUNET_MESSENGER_MessageStore *store,
   struct GNUNET_MESSENGER_MessageEntryStorage storage;
   struct GNUNET_MESSENGER_MessageEntry *entry;
 
+  memset(&storage, 0, sizeof(storage));
+
   do
   {
+    entry = NULL;
+
+    if ((load_message_store_attribute_failed(entries, storage.hash)) ||
+        (load_message_store_attribute_failed(entries, storage.entry.offset)) ||
+        (load_message_store_attribute_failed(entries, storage.entry.length)))
+      break;
+
     entry = GNUNET_new(struct GNUNET_MESSENGER_MessageEntry);
 
-    if (GNUNET_DISK_file_read (entries, &storage, sizeof(storage)) == 
sizeof(storage))
-    {
-      GNUNET_memcpy(entry, &(storage.entry), sizeof(*entry));
-
-      if ((GNUNET_YES == GNUNET_CONTAINER_multihashmap_contains 
(store->entries, &(storage.hash))) ||
-          (GNUNET_OK != GNUNET_CONTAINER_multihashmap_put (store->entries, 
&(storage.hash), entry,
-                                                           
GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST)))
-      {
-        store->rewrite_entries = GNUNET_YES;
-        GNUNET_free(entry);
-      }
-    }
-    else
-    {
-      GNUNET_free(entry);
+    GNUNET_memcpy(entry, &(storage.entry), sizeof(*entry));
 
-      entry = NULL;
+    if ((GNUNET_YES == GNUNET_CONTAINER_multihashmap_contains (store->entries, 
&(storage.hash))) ||
+        (GNUNET_OK != GNUNET_CONTAINER_multihashmap_put (store->entries, 
&(storage.hash), entry,
+                                                         
GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST)))
+    {
+      store->rewrite_entries = GNUNET_YES;
+      break;
     }
   }
   while (entry);
 
+  if (entry)
+    GNUNET_free(entry);
+
   GNUNET_DISK_file_close (entries);
 }
 
@@ -164,17 +173,19 @@ load_message_store_links (struct 
GNUNET_MESSENGER_MessageStore *store,
     return;
 
   struct GNUNET_MESSENGER_MessageLinkStorage storage;
-  struct GNUNET_MESSENGER_MessageLink *link = NULL;
+  struct GNUNET_MESSENGER_MessageLink *link;
 
   memset(&storage, 0, sizeof(storage));
 
   do
   {
-    if ((sizeof(storage.hash) != GNUNET_DISK_file_read (entries, 
&(storage.hash), sizeof(storage.hash))) ||
-        (sizeof(storage.link.multiple) != GNUNET_DISK_file_read (entries, 
&(storage.link.multiple), sizeof(storage.link.multiple))) ||
-        (sizeof(storage.link.first) != GNUNET_DISK_file_read (entries, 
&(storage.link.first), sizeof(storage.link.first))) ||
+    link = NULL;
+
+    if ((load_message_store_attribute_failed(entries, storage.hash)) ||
+        (load_message_store_attribute_failed(entries, storage.link.multiple)) 
||
+        (load_message_store_attribute_failed(entries, storage.link.first)) ||
         ((GNUNET_YES == storage.link.multiple) &&
-         (sizeof(storage.link.second) != GNUNET_DISK_file_read (entries, 
&(storage.link.second), sizeof(storage.link.second)))))
+         (load_message_store_attribute_failed(entries, storage.link.second))))
       break;
 
     link = GNUNET_new(struct GNUNET_MESSENGER_MessageLink);
@@ -250,10 +261,9 @@ iterate_save_entries (void *cls,
 
   struct GNUNET_MESSENGER_MessageEntryStorage storage;
 
-  GNUNET_memcpy(&(storage.hash), key, sizeof(storage.hash));
-  GNUNET_memcpy(&(storage.entry), entry, sizeof(*entry));
-
-  GNUNET_DISK_file_write (save->storage, &storage, sizeof(storage));
+  GNUNET_DISK_file_write (save->storage, key, sizeof(*key));
+  GNUNET_DISK_file_write (save->storage, &(entry->offset), 
sizeof(entry->offset));
+  GNUNET_DISK_file_write (save->storage, &(entry->length), 
sizeof(entry->length));
 
   return GNUNET_YES;
 }
@@ -276,8 +286,10 @@ iterate_save_messages (void *cls,
   storage.entry.length = get_message_size (message, GNUNET_YES);
   storage.entry.offset = GNUNET_DISK_file_seek (save->store->storage_messages, 
0, GNUNET_DISK_SEEK_END);
 
-  if ((GNUNET_SYSERR == storage.entry.offset) || (sizeof(storage)
-      != GNUNET_DISK_file_write (save->storage, &storage, sizeof(storage))))
+  if ((GNUNET_SYSERR == storage.entry.offset) ||
+      (save_message_store_attribute_failed(save->storage, storage.hash)) ||
+      (save_message_store_attribute_failed(save->storage, 
storage.entry.offset)) ||
+      (save_message_store_attribute_failed(save->storage, 
storage.entry.length)))
     return GNUNET_YES;
 
   char *buffer = GNUNET_malloc(storage.entry.length);
@@ -287,7 +299,6 @@ iterate_save_messages (void *cls,
   GNUNET_DISK_file_write (save->store->storage_messages, buffer, 
storage.entry.length);
 
   GNUNET_free(buffer);
-
   return GNUNET_YES;
 }
 
diff --git a/src/messenger/gnunet-service-messenger_operation.c 
b/src/messenger/gnunet-service-messenger_operation.c
index a8744e577..2b92d0c1d 100644
--- a/src/messenger/gnunet-service-messenger_operation.c
+++ b/src/messenger/gnunet-service-messenger_operation.c
@@ -63,6 +63,8 @@ load_operation (struct GNUNET_MESSENGER_OperationStore *store,
 {
   GNUNET_assert((store) && (path));
 
+  GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Load operation configuration: %s\n", 
path);
+
   struct GNUNET_CONFIGURATION_Handle *cfg = GNUNET_CONFIGURATION_create ();
   struct GNUNET_MESSENGER_Operation* op = NULL;
 
@@ -124,6 +126,8 @@ save_operation (const struct GNUNET_MESSENGER_Operation *op,
 {
   GNUNET_assert((path) && (op));
 
+  GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Save operation configuration: %s\n", 
path);
+
   struct GNUNET_CONFIGURATION_Handle *cfg = GNUNET_CONFIGURATION_create ();
 
   char *hash_data;
diff --git a/src/messenger/gnunet-service-messenger_operation_store.c 
b/src/messenger/gnunet-service-messenger_operation_store.c
index 4f8419daa..276f0b92b 100644
--- a/src/messenger/gnunet-service-messenger_operation_store.c
+++ b/src/messenger/gnunet-service-messenger_operation_store.c
@@ -65,23 +65,20 @@ callback_scan_for_operations (void *cls,
 {
   struct GNUNET_MESSENGER_OperationStore *store = cls;
 
-  if (GNUNET_YES == GNUNET_DISK_file_test (filename))
-  {
-    char *path;
-
-    GNUNET_asprintf (&path, "%s%c", filename, DIR_SEPARATOR);
+  if (GNUNET_YES != GNUNET_DISK_file_test (filename))
+    return GNUNET_OK;
 
-    struct GNUNET_MESSENGER_Operation *op = load_operation(store, path);
+  if ((strlen(filename) <= 4) || (0 != strcmp(filename + strlen(filename) - 4, 
".cfg")))
+    return GNUNET_OK;
 
-    if ((op) && (GNUNET_OK != GNUNET_CONTAINER_multihashmap_put(
-        store->operations,
-        &(op->hash), op,
-        GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST)))
-    {
-      destroy_operation(op);
-    }
+  struct GNUNET_MESSENGER_Operation *op = load_operation(store, filename);
 
-    GNUNET_free(path);
+  if ((op) && (GNUNET_OK != GNUNET_CONTAINER_multihashmap_put(
+      store->operations,
+      &(op->hash), op,
+      GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST)))
+  {
+    destroy_operation(op);
   }
 
   return GNUNET_OK;
@@ -93,8 +90,13 @@ load_operation_store (struct GNUNET_MESSENGER_OperationStore 
*store,
 {
   GNUNET_assert ((store) && (directory));
 
-  if (GNUNET_OK == GNUNET_DISK_directory_test (directory, GNUNET_YES))
-    GNUNET_DISK_directory_scan (directory, callback_scan_for_operations, 
store);
+  char* load_dir;
+  GNUNET_asprintf (&load_dir, "%s%s%c", directory, "operations", 
DIR_SEPARATOR);
+
+  if (GNUNET_OK == GNUNET_DISK_directory_test (load_dir, GNUNET_YES))
+    GNUNET_DISK_directory_scan (load_dir, callback_scan_for_operations, store);
+
+  GNUNET_free(load_dir);
 }
 
 static int
diff --git a/src/messenger/gnunet-service-messenger_room.c 
b/src/messenger/gnunet-service-messenger_room.c
index d34665511..7f2fd0ca6 100644
--- a/src/messenger/gnunet-service-messenger_room.c
+++ b/src/messenger/gnunet-service-messenger_room.c
@@ -1188,11 +1188,7 @@ load_room (struct GNUNET_MESSENGER_SrvRoom *room)
     load_list_tunnels(&(room->basement), basement_file);
     GNUNET_free(basement_file);
 
-    char *last_messages_file;
-    GNUNET_asprintf (&last_messages_file, "%s%s", room_dir, 
"last_messages.list");
-
     load_message_state(&(room->state), room_dir);
-    GNUNET_free (last_messages_file);
   }
 
   GNUNET_free(room_dir);
diff --git a/src/messenger/messenger_api.c b/src/messenger/messenger_api.c
index 2db841315..a37b1b10b 100644
--- a/src/messenger/messenger_api.c
+++ b/src/messenger/messenger_api.c
@@ -261,7 +261,7 @@ handle_recv_message (void *cls,
       handle->msg_callback (handle->msg_cls, room, contact, stored_message, 
hash, flags);
   }
   else
-    GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Room not found\n");
+    GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Unknown room for this client: %s\n", 
GNUNET_h2s (key));
 
   cleanup_message(&message);
 }

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]