please review

M.
From 464ddd25f601c12e4c41057d81d7880100bf9287 Mon Sep 17 00:00:00 2001
From: Michal Toman <[email protected]>
Date: Wed, 6 Jun 2012 16:34:41 +0200
Subject: [PATCH] a-a-g-c-b: hash fingerprints by default

---
 src/plugins/abrt-action-generate-core-backtrace.c |   30 +++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/src/plugins/abrt-action-generate-core-backtrace.c 
b/src/plugins/abrt-action-generate-core-backtrace.c
index a21da0a..5f4f3c6 100644
--- a/src/plugins/abrt-action-generate-core-backtrace.c
+++ b/src/plugins/abrt-action-generate-core-backtrace.c
@@ -17,11 +17,37 @@
     51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */
 #include "libabrt.h"
+#include <btparser/hash_sha1.h>
 #include <btparser/utils.h>
 #include <btparser/core-backtrace.h>
 #include <btparser/core-backtrace-python.h>
 #include <btparser/core-backtrace-oops.h>
 
+static bool raw_fingerprints = false;
+
+static void hash_fingerprints(GList *backtrace)
+{
+    GList *elem = backtrace;
+    struct backtrace_entry *entry;
+    char bin_hash[BTP_SHA1_RESULT_BIN_LEN], hash[BTP_SHA1_RESULT_LEN];
+    btp_sha1_ctx_t ctx;
+    while (elem)
+    {
+        entry = (struct backtrace_entry *)elem->data;
+        if (entry->fingerprint)
+        {
+            btp_sha1_begin(&ctx);
+            btp_sha1_hash(&ctx, entry->fingerprint, 
strlen(entry->fingerprint));
+            btp_sha1_end(&ctx, bin_hash);
+            btp_bin2hex(hash, bin_hash, BTP_SHA1_RESULT_BIN_LEN)[0] = '\0';
+
+            free(entry->fingerprint);
+            entry->fingerprint = btp_strdup(hash);
+        }
+        elem = g_list_next(elem);
+    }
+}
+
 int main(int argc, char **argv)
 {
     /* I18n */
@@ -46,11 +72,13 @@ int main(int argc, char **argv)
     enum {
         OPT_v = 1 << 0,
         OPT_d = 1 << 1,
+        OPT_r = 1 << 2,
     };
     /* Keep enum above and order of options below in sync! */
     struct options program_options[] = {
         OPT__VERBOSE(&g_verbose),
         OPT_STRING('d', NULL, &dump_dir_name, "DIR", _("Problem directory")),
+        OPT_BOOL('r', "raw", &raw_fingerprints, _("Do not hash fingerprints")),
         OPT_END()
     };
     /*unsigned opts =*/ parse_opts(argc, argv, program_options, 
program_usage_string);
@@ -110,6 +138,8 @@ int main(int argc, char **argv)
         /* Extract address ranges from all the executables in the backtrace*/
         VERB1 log("Computing function fingerprints");
         btp_core_backtrace_fingerprint(backtrace);
+        if (!raw_fingerprints)
+            hash_fingerprints(backtrace);
     }
     else if (strcmp(analyzer, "Python") == 0)
         backtrace = btp_parse_python_backtrace(txt_backtrace);
-- 
1.7.10.2

Reply via email to