From 16468b57579997971c056687ecc8438a406d57c2 Mon Sep 17 00:00:00 2001 From: Ernestas Kulik Date: Tue, 14 Jan 2020 16:36:21 +0100 Subject: [PATCH] Use GChecksum to compute checksums MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit d605ffeaa6ae411ef396160ffd67b7a6fd27c6ba in libreport removed some convenience API for hashing data, so let’s just go with what GLib has in store. --- src/dbus/abrt_problems2_service.c | 33 +++++++++++---------- src/plugins/abrt-action-analyze-backtrace.c | 8 +++-- src/plugins/abrt-action-analyze-c.c | 7 +++-- src/plugins/abrt-action-analyze-python.c | 9 +++--- 4 files changed, 32 insertions(+), 25 deletions(-) diff --git a/src/dbus/abrt_problems2_service.c b/src/dbus/abrt_problems2_service.c index 2511136f..a0d2a3ce 100644 --- a/src/dbus/abrt_problems2_service.c +++ b/src/dbus/abrt_problems2_service.c @@ -572,9 +572,11 @@ static AbrtP2Object *session_object_register(AbrtP2Service *service, static char *session_object_caller_to_path(const char *caller) { - char hash_str[SHA1_RESULT_LEN*2 + 1]; - str_to_sha1str(hash_str, caller); - return xasprintf(ABRT_P2_PATH"/Session/%s", hash_str); + g_autofree char *checksum = NULL; + + checksum = g_compute_checksum_for_string(G_CHECKSUM_SHA1, caller, -1); + + return xasprintf(ABRT_P2_PATH"/Session/%s", checksum); } static AbrtP2Object *abrt_p2_service_get_session_for_caller( @@ -1323,9 +1325,11 @@ static void entry_object_destructor(AbrtP2Object *obj) static char *entry_object_dir_name_to_path(const char *dd_dirname) { - char hash_str[SHA1_RESULT_LEN*2 + 1]; - str_to_sha1str(hash_str, dd_dirname); - return xasprintf(ABRT_P2_PATH"/Entry/%s", hash_str); + g_autofree char *checksum = NULL; + + checksum = g_compute_checksum_for_string(G_CHECKSUM_SHA1, dd_dirname, -1); + + return xasprintf(ABRT_P2_PATH"/Entry/%s", checksum); } static AbrtP2Object *entry_object_register_dump_dir(AbrtP2Service *service, @@ -1480,8 +1484,10 @@ char *abrt_p2_service_save_problem( AbrtP2Service *service, else { /* start hash */ - sha1_ctx_t sha1ctx; - sha1_begin(&sha1ctx); + g_autoptr(GChecksum) checksum = NULL; + const char *digest; + + checksum = g_checksum_new(G_CHECKSUM_SHA1); /* * To avoid spurious hash differences, sort keys so that elements are @@ -1500,19 +1506,16 @@ char *abrt_p2_service_save_problem( AbrtP2Service *service, gsize size = 0; const char *content = g_variant_get_string(element, &size); - sha1_hash(&sha1ctx, content, size); + + g_checksum_update(checksum, (const unsigned char *)content, size); g_variant_unref(element); } g_list_free_full(list, free); - /* end hash */ - char hash_bytes[SHA1_RESULT_LEN]; - sha1_end(&sha1ctx, hash_bytes); - char hash_str[SHA1_RESULT_LEN*2 + 1]; - bin2hex(hash_str, hash_bytes, SHA1_RESULT_LEN)[0] = '\0'; + digest = g_checksum_get_string(checksum); - g_variant_dict_insert(&pd, FILENAME_UUID, "s", hash_str); + g_variant_dict_insert(&pd, FILENAME_UUID, "s", digest); } } diff --git a/src/plugins/abrt-action-analyze-backtrace.c b/src/plugins/abrt-action-analyze-backtrace.c index 622d7953..20e71945 100644 --- a/src/plugins/abrt-action-analyze-backtrace.c +++ b/src/plugins/abrt-action-analyze-backtrace.c @@ -82,6 +82,8 @@ int main(int argc, char **argv) /* Store backtrace hash */ if (!backtrace) { + g_autofree char *checksum = NULL; + /* * The parser failed. Compute the duphash from the executable * instead of a backtrace. @@ -98,10 +100,10 @@ int main(int argc, char **argv) strbuf_prepend_str(emptybt, component); log_debug("Generating duphash: %s", emptybt->buf); - char hash_str[SHA1_RESULT_LEN*2 + 1]; - str_to_sha1str(hash_str, emptybt->buf); - dd_save_text(dd, FILENAME_DUPHASH, hash_str); + checksum = g_compute_checksum_for_string(G_CHECKSUM_SHA1, emptybt->buf, -1); + + dd_save_text(dd, FILENAME_DUPHASH, checksum); /* * Other parts of ABRT assume that if no rating is available, * it is ok to allow reporting of the bug. To be sure no bad diff --git a/src/plugins/abrt-action-analyze-c.c b/src/plugins/abrt-action-analyze-c.c index 08e48779..4a6d34d4 100644 --- a/src/plugins/abrt-action-analyze-c.c +++ b/src/plugins/abrt-action-analyze-c.c @@ -235,10 +235,11 @@ int main(int argc, char **argv) log_debug("String to hash: %s", string_to_hash); - char hash_str[SHA1_RESULT_LEN*2 + 1]; - str_to_sha1str(hash_str, string_to_hash); + g_autofree char *checksum = NULL; - dd_save_text(dd, FILENAME_UUID, hash_str); + checksum = g_compute_checksum_for_string(G_CHECKSUM_SHA1, string_to_hash, -1); + + dd_save_text(dd, FILENAME_UUID, checksum); /* Create crash_function element from core_backtrace */ char *core_backtrace_json = dd_load_text_ext(dd, FILENAME_CORE_BACKTRACE, diff --git a/src/plugins/abrt-action-analyze-python.c b/src/plugins/abrt-action-analyze-python.c index 0dd55750..10589cbb 100644 --- a/src/plugins/abrt-action-analyze-python.c +++ b/src/plugins/abrt-action-analyze-python.c @@ -26,6 +26,8 @@ int main(int argc, char **argv) { + g_autofree char *checksum = NULL; + /* I18n */ setlocale(LC_ALL, ""); #if ENABLE_NLS @@ -91,13 +93,12 @@ int main(int argc, char **argv) char *bt_end = strchrnul(bt, '\n'); *bt_end = '\0'; - char hash_str[SHA1_RESULT_LEN*2 + 1]; - str_to_sha1str(hash_str, bt); + checksum = g_compute_checksum_for_string(G_CHECKSUM_SHA1, bt, -1); free(bt); - dd_save_text(dd, FILENAME_UUID, hash_str); - dd_save_text(dd, FILENAME_DUPHASH, hash_str); + dd_save_text(dd, FILENAME_UUID, checksum); + dd_save_text(dd, FILENAME_DUPHASH, checksum); dd_close(dd); return 0; -- 2.25.0