[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.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [gnunet] branch master updated: -fix messenger load-, store-operations and uninitialized memory,
gnunet <=