summaryrefslogtreecommitdiffstats
path: root/src/btparser
diff options
context:
space:
mode:
authorKarel Klic <kklic@redhat.com>2011-05-02 20:17:55 +0200
committerKarel Klic <kklic@redhat.com>2011-05-02 20:17:55 +0200
commitf2b0b2242d1d1a1a171c8bbae82acba1d45cf84e (patch)
tree17d3430106bd6e0f9331a12f1c3d70ff3e167627 /src/btparser
parentcdec5d0d390d8f77230a5cb6b8872e7bf7e92ea1 (diff)
downloadabrt-f2b0b2242d1d1a1a171c8bbae82acba1d45cf84e.tar.gz
abrt-f2b0b2242d1d1a1a171c8bbae82acba1d45cf84e.tar.xz
abrt-f2b0b2242d1d1a1a171c8bbae82acba1d45cf84e.zip
btparser: Remove top frame with
address 0x0000 (jump to NULL) during normalization to avoid incorrect backtrace ratings (rhbz#639049)
Diffstat (limited to 'src/btparser')
-rw-r--r--src/btparser/normalize.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/btparser/normalize.c b/src/btparser/normalize.c
index 4bbee99c..64ccada7 100644
--- a/src/btparser/normalize.c
+++ b/src/btparser/normalize.c
@@ -34,6 +34,26 @@ btp_normalize_thread(struct btp_thread *thread)
btp_normalize_linux_thread(thread);
btp_normalize_xorg_thread(thread);
+ /* If the first frame has address 0x0000 and its name is '??', it
+ * is a dereferenced null, and we remove it. This frame is not
+ * really invalid, and it affects backtrace quality rating. See
+ * Red Hat Bugzilla bug #639038.
+ * @code
+ * #0 0x0000000000000000 in ?? ()
+ * No symbol table info available.
+ * #1 0x0000000000422648 in main (argc=1, argv=0x7fffa57cf0d8) at totem.c:242
+ * error = 0x0
+ * totem = 0xdee070 [TotemObject]
+ * @endcode
+ */
+ if (thread->frames &&
+ thread->frames->address == 0x0000 &&
+ thread->frames->function_name &&
+ 0 == strcmp(thread->frames->function_name, "??"))
+ {
+ btp_thread_remove_frame(thread, thread->frames);
+ }
+
/* If the last frame has address 0x0000 and its name is '??',
* remove it. This frame is not really invalid, and it affects
* backtrace quality rating. See Red Hat Bugzilla bug #592523.