diff options
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/abrt-action-analyze-backtrace.c | 14 | ||||
-rw-r--r-- | src/plugins/abrt-action-analyze-c.c | 16 | ||||
-rw-r--r-- | src/plugins/abrt-action-analyze-oops.c | 45 | ||||
-rw-r--r-- | src/plugins/abrt-action-analyze-python.c | 45 |
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]; |