From c7eb4b1ea31ed515ea3e96c6b320a82f54de1c12 Mon Sep 17 00:00:00 2001 From: objnull Date: Sun, 8 Sep 2024 01:28:55 -0400 Subject: [PATCH] Fixed unstable string concatenation --- project/backend/manager.c | 59 +++++++++++++++------------------------ 1 file changed, 22 insertions(+), 37 deletions(-) diff --git a/project/backend/manager.c b/project/backend/manager.c index bdae452..15506d7 100644 --- a/project/backend/manager.c +++ b/project/backend/manager.c @@ -35,23 +35,6 @@ char** split_string(const char* str, char delimiter, int* count) { return result; } -void string_append(char* first, const char* second) { - // Store first index - char* i_first = first; - - // Get to the end of string 1 - while (*first) { - ++first; - } - - // Copying Strings - while (*second) { - *first++ = *second++; - } - - // Reset index - first = i_first; -} void manager_loadnames(Manager* manager){ // Loading the names of all passwords char* data = store_load("Data"); @@ -132,45 +115,47 @@ void manager_savepass(Manager* manager, Password* pass) { // Is the result empty? if(!result) { + // Free prior result + free(result); + // Allocating result - result = malloc(sizeof(char*)); + FuriString* n_result = furi_string_alloc(); // Setting stuff - string_append(result, pass->name); - string_append(result, "|"); - string_append(result, pass->user); - string_append(result, "|"); - string_append(result, pass->phrase); - string_append(result, "|0"); + furi_string_printf(n_result, "%s|%s|%s|0", pass->name, pass->user, pass->phrase); // Saving the data - store_save("Data", result); + char* data = malloc(sizeof(char)); + strcpy(data, furi_string_get_cstr(n_result)); + store_save("Data", data); // Cleanup - free(result); + furi_string_free(n_result); + free(data); free(pass); } else { // Our new stuff - char* new_addon = malloc(sizeof(char*)); + FuriString* new_addon = furi_string_alloc(); // Adding the Name - string_append(new_addon, "|"); - string_append(new_addon, pass->name); - string_append(new_addon, "|"); - string_append(new_addon, pass->user); - string_append(new_addon, "|"); - string_append(new_addon, pass->phrase); - string_append(new_addon, "|0"); + furi_string_printf(new_addon, "|%s|%s|%s|0", pass->name, pass->user, pass->phrase); + + // New result + FuriString* new_result = furi_string_alloc(); // Appending addon to result - string_append(result, new_addon); + furi_string_printf(new_result, "%s%s", result, furi_string_get_cstr(new_addon)); // Saving the data - store_save("Data", result); + char* data = malloc(sizeof(char)); + strcpy(data, furi_string_get_cstr(new_result)); + store_save("Data", data); // Cleanup - free(new_addon); + furi_string_free(new_addon); + furi_string_free(new_result); free(result); + free(data); free(pass); } }