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