summaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/abrt-action-analyze-backtrace.c14
-rw-r--r--src/plugins/abrt-action-analyze-c.c16
-rw-r--r--src/plugins/abrt-action-analyze-oops.c45
-rw-r--r--src/plugins/abrt-action-analyze-python.c45
4 files changed, 52 insertions, 68 deletions
diff --git a/src/plugins/abrt-action-analyze-backtrace.c b/src/plugins/abrt-action-analyze-backtrace.c
index 5e59f49b..f25f379c 100644
--- a/src/plugins/abrt-action-analyze-backtrace.c
+++ b/src/plugins/abrt-action-analyze-backtrace.c
@@ -28,17 +28,15 @@ static const char *dump_dir_name = ".";
static void create_hash(char hash_str[SHA1_RESULT_LEN*2 + 1], const char *pInput)
{
- unsigned len;
- unsigned char hash2[SHA1_RESULT_LEN];
+ unsigned char hash_bytes[SHA1_RESULT_LEN];
sha1_ctx_t sha1ctx;
-
sha1_begin(&sha1ctx);
- sha1_hash(pInput, strlen(pInput), &sha1ctx);
- sha1_end(hash2, &sha1ctx);
- len = SHA1_RESULT_LEN;
+ sha1_hash(&sha1ctx, pInput, strlen(pInput));
+ sha1_end(&sha1ctx, hash_bytes);
+ unsigned len = SHA1_RESULT_LEN;
+ unsigned char *s = hash_bytes;
char *d = hash_str;
- unsigned char *s = hash2;
while (len)
{
*d++ = "0123456789abcdef"[*s >> 4];
@@ -47,7 +45,7 @@ static void create_hash(char hash_str[SHA1_RESULT_LEN*2 + 1], const char *pInput
len--;
}
*d = '\0';
- //log("hash2:%s str:'%s'", hash_str, pInput);
+ //log("hash:%s str:'%s'", hash_str, pInput);
}
int main(int argc, char **argv)
diff --git a/src/plugins/abrt-action-analyze-c.c b/src/plugins/abrt-action-analyze-c.c
index 3dfbe485..e3fe71d3 100644
--- a/src/plugins/abrt-action-analyze-c.c
+++ b/src/plugins/abrt-action-analyze-c.c
@@ -23,17 +23,16 @@
static void create_hash(char hash_str[SHA1_RESULT_LEN*2 + 1], const char *pInput)
{
- unsigned len;
- unsigned char hash2[SHA1_RESULT_LEN];
- sha1_ctx_t sha1ctx;
+ unsigned char hash_bytes[SHA1_RESULT_LEN];
+ sha1_ctx_t sha1ctx;
sha1_begin(&sha1ctx);
- sha1_hash(pInput, strlen(pInput), &sha1ctx);
- sha1_end(hash2, &sha1ctx);
- len = SHA1_RESULT_LEN;
+ sha1_hash(&sha1ctx, pInput, strlen(pInput));
+ sha1_end(&sha1ctx, hash_bytes);
+ unsigned len = SHA1_RESULT_LEN;
+ unsigned char *s = hash_bytes;
char *d = hash_str;
- unsigned char *s = hash2;
while (len)
{
*d++ = "0123456789abcdef"[*s >> 4];
@@ -42,7 +41,7 @@ static void create_hash(char hash_str[SHA1_RESULT_LEN*2 + 1], const char *pInput
len--;
}
*d = '\0';
- //log("hash2:%s str:'%s'", hash_str, pInput);
+ //log("hash:%s str:'%s'", hash_str, pInput);
}
static char *run_unstrip_n(const char *dump_dir_name, unsigned timeout_sec)
@@ -236,7 +235,6 @@ int main(int argc, char **argv)
char hash_str[SHA1_RESULT_LEN*2 + 1];
create_hash(hash_str, string_to_hash);
- /*free(hash_str);*/
dd_save_text(dd, FILENAME_UUID, hash_str);
dd_close(dd);
diff --git a/src/plugins/abrt-action-analyze-oops.c b/src/plugins/abrt-action-analyze-oops.c
index 97a7cbf5..8fca109d 100644
--- a/src/plugins/abrt-action-analyze-oops.c
+++ b/src/plugins/abrt-action-analyze-oops.c
@@ -21,11 +21,12 @@
#define PROGNAME "abrt-action-analyze-oops"
-static unsigned hash_oops_str(const char *oops_ptr)
+static void hash_oops_str(char hash_str[SHA1_RESULT_LEN*2 + 1], char *oops_buf, const char *oops_ptr)
{
unsigned char old_c;
unsigned char c = 0;
- unsigned hash = 0;
+
+ char *dst = oops_buf;
/* Special-case: if the first line is of form:
* WARNING: at net/wireless/core.c:614 wdev_cleanup_work+0xe9/0x120 [cfg80211]() (Not tainted)
@@ -41,10 +42,9 @@ static unsigned hash_oops_str(const char *oops_ptr)
oops_ptr += sizeof("WARNING: at ")-1;
while (oops_ptr < p)
{
- c = *oops_ptr++;
- hash = ((hash << 5) ^ (hash >> 27)) ^ c;
+ *dst++ = *oops_ptr++;
}
- return hash;
+ goto gen_hash;
}
}
@@ -111,13 +111,28 @@ static unsigned hash_oops_str(const char *oops_ptr)
// [<c049b460>] ? sys_ioctl+0x40/0x5c
// [<c0403c76>] ? syscall_call+0x7/0xb
- /* An algorithm proposed by Donald E. Knuth in The Art Of Computer
- * Programming Volume 3, under the topic of sorting and search
- * chapter 6.4.
- */
- hash = ((hash << 5) ^ (hash >> 27)) ^ c;
+ *dst++ = c;
+ }
+
+ gen_hash: ;
+
+ unsigned char hash_bytes[SHA1_RESULT_LEN];
+ sha1_ctx_t sha1ctx;
+ sha1_begin(&sha1ctx);
+ sha1_hash(&sha1ctx, oops_buf, dst - oops_buf);
+ sha1_end(&sha1ctx, hash_bytes);
+
+ unsigned len = SHA1_RESULT_LEN;
+ unsigned char *s = hash_bytes;
+ char *d = hash_str;
+ while (len)
+ {
+ *d++ = "0123456789abcdef"[*s >> 4];
+ *d++ = "0123456789abcdef"[*s & 0xf];
+ s++;
+ len--;
}
- return hash;
+ *d = '\0';
}
int main(int argc, char **argv)
@@ -157,12 +172,10 @@ int main(int argc, char **argv)
return 1;
char *oops = dd_load_text(dd, FILENAME_BACKTRACE);
- unsigned hash = hash_oops_str(oops);
- /* free(oops); */
+ char hash_str[SHA1_RESULT_LEN*2 + 1];
+ hash_oops_str(hash_str, oops, oops);
+ free(oops);
- hash &= 0x7FFFFFFF;
- char hash_str[sizeof(int)*3 + 2];
- sprintf(hash_str, "%u", hash);
dd_save_text(dd, FILENAME_UUID, hash_str);
dd_save_text(dd, FILENAME_DUPHASH, hash_str);
diff --git a/src/plugins/abrt-action-analyze-python.c b/src/plugins/abrt-action-analyze-python.c
index 44e2d4b8..07f14a32 100644
--- a/src/plugins/abrt-action-analyze-python.c
+++ b/src/plugins/abrt-action-analyze-python.c
@@ -21,10 +21,6 @@
#define PROGNAME "abrt-action-analyze-python"
-// Hash is MD5_RESULT_LEN bytes long, but we use only first 4
-// (I don't know why old Python code was using only 4, I mimic that)
-#define HASH_STRING_HEX_DIGITS 4
-
int main(int argc, char **argv)
{
char *env_verbose = getenv("ABRT_VERBOSE");
@@ -63,41 +59,20 @@ int main(int argc, char **argv)
char *bt = dd_load_text(dd, FILENAME_BACKTRACE);
/* Hash 1st line of backtrace and save it as UUID and DUPHASH */
+ /* "example.py:1:<module>:ZeroDivisionError: integer division or modulo by zero" */
+ unsigned char hash_bytes[SHA1_RESULT_LEN];
+ sha1_ctx_t sha1ctx;
+ sha1_begin(&sha1ctx);
const char *bt_end = strchrnul(bt, '\n');
- unsigned char hash_bytes[MD5_RESULT_LEN];
- md5_ctx_t md5ctx;
- md5_begin(&md5ctx);
- // Better:
- // "example.py:1:<module>:ZeroDivisionError: integer division or modulo by zero"
- //md5_hash(bt_str, bt_end - bt_str, &md5ctx);
- //free(bt);
- // For now using compat version:
- {
- char *copy = xstrndup(bt, bt_end - bt);
- free(bt);
- char *s = copy;
- char *d = copy;
- unsigned colon_cnt = 0;
- while (*s && colon_cnt < 3)
- {
- if (*s != ':')
- *d++ = *s;
- else
- colon_cnt++;
- s++;
- }
- // copy = "example.py1<module>"
- md5_hash(copy, d - copy, &md5ctx);
- free(copy);
- }
- // end of compat version
- md5_end(hash_bytes, &md5ctx);
+ sha1_hash(&sha1ctx, bt, bt_end - bt);
+ sha1_end(&sha1ctx, hash_bytes);
+ free(bt);
- char hash_str[HASH_STRING_HEX_DIGITS*2 + 1];
- unsigned len = HASH_STRING_HEX_DIGITS;
- char *d = hash_str;
+ char hash_str[SHA1_RESULT_LEN*2 + 1];
+ unsigned len = SHA1_RESULT_LEN;
unsigned char *s = hash_bytes;
+ char *d = hash_str;
while (len)
{
*d++ = "0123456789abcdef"[*s >> 4];