From 16468b57579997971c056687ecc8438a406d57c2 Mon Sep 17 00:00:00 2001
From: Ernestas Kulik <ekulik@redhat.com>
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