GNOME Bugzilla – Bug 724039
Message preview shows a wrong message
Last modified: 2014-12-12 12:48:15 UTC
Every once in a while, when click in a message to read it, the message "Error verifying signature: Operation was cancelled" is shown. After a few times trying to open the message I'm able to see the message's content. I can see this problem happening when I'm using my Zimbra account (IMAP+). What kind of info would be useful?
I can confirm this in 3.10 on my GMail IMAP+ account.
I've never seen this myself, so I need some help debugging it. I'd like to know where the cancellation error is getting set. I assume it's happening in the CamelCipherContext call. Catching specific errors for something not 100% reproducible is a little tricky though. Try this in gdb. Substitute $BP1 and $BP2 for the breakpoint numbers gdb assigns. (Sorry this is a bit of a pain; I can't figure out a more auto- mated way to set this up with my feeble gdb skillz.) (gdb) break g_set_error # Note breakpoint number ($BP1) (gdb) disable $BP1 (gdb) break gpg_verify_sync # Note breakpoint number ($BP2) (gdb) continue # Select a signed message to halt at $BP2. (gdb) commands $BP2 > enable $BP1 > continue > end (gdb) up (gdb) break (gdb) commands > disable $BP1 > continue > end (gdb) continue Continue using Evolution as normal. Hopefully that will break when a GError is set, but only while verifying a digital signature. When it halts at "g_set_error", get a backtrace.
This might NOT be the same issue as one of the two message HAS a signature, might rather be a race issue, anyway: Local POP inbox, when very quickly going through the message list pane with the arrow up/down keys. Message list pane shows a different message chosen (without signature) than what headers in message preview pane show (neighbor message with signature). Body in message preview pane shows only "Error verifying signature: Operation was cancelled" and when accessing that message again, it says "Signature exists, but need public key" at the bottom. $:andre\> gdb evolution (gdb) run Starting program: /usr/bin/evolution ^C Program received signal SIGINT, Interrupt. [...] (gdb) break g_set_error Breakpoint 1 at 0xb4297600: file gerror.c, line 551. (gdb) disable 1 (gdb) break gpg_verify_sync Breakpoint 2 at 0xb78ba760: file camel-gpg-context.c, line 1765. (gdb) continue Continuing. [...]
+ Trace 233155
Thread 2463030080 (LWP 6739)
Thread 146 (Thread 0x92cedb40 (LWP 6739))
(gdb) commands Type commands for breakpoint(s) 3, one per line. End with a line saying just "end". >disable 1 >continue >end (gdb) continue Continuing. [New Thread 0x93cefb40 (LWP 6743)] Detaching after fork from child process 6744. [New Thread 0x994fab40 (LWP 6745)] [Thread 0x93cefb40 (LWP 6743) exited] Breakpoint 3, camel_cipher_context_verify_sync (context=context@entry=0xc510188, ipart=ipart@entry=0xae46a80, cancellable=cancellable@entry=0xbaf7438, error=error@entry=0x92cece2c) at camel-cipher-context.c:941 941 CAMEL_CHECK_GERROR (context, verify_sync, valid != NULL, error); [New Thread 0x93cefb40 (LWP 6746)] [New Thread 0x96cf5b40 (LWP 6747)] [...]
Matthew, Following your steps I could see the error happening but gdb didn't break at that point. So, I'm not completely sure if this output will be useful. Anyway, here is the "t a a bt" following your steps: Breakpoint 1 at 0x3c022359c0: file gerror.c, line 551. Breakpoint 2 at 0x7ffff5d50a83: file camel-gpg-context.c, line 1765. Continuing. [New Thread 0x7fff657fa700 (LWP 32137)] [New Thread 0x7fff1e7fc700 (LWP 32138)] [Thread 0x7fff657fa700 (LWP 32137) exited] [New Thread 0x7fff657fa700 (LWP 32139)] [Thread 0x7fff657fa700 (LWP 32139) exited] [New Thread 0x7fff657fa700 (LWP 32140)] [Thread 0x7fff677fe700 (LWP 32065) exited] [Thread 0x7fff657fa700 (LWP 32140) exited] [Thread 0x7fff1ffff700 (LWP 32080) exited] [New Thread 0x7fff1ffff700 (LWP 32141)] [Thread 0x7fff1ffff700 (LWP 32141) exited] [New Thread 0x7fff1ffff700 (LWP 32143)] [New Thread 0x7fff657fa700 (LWP 32144)] [New Thread 0x7fff677fe700 (LWP 32145)] [Thread 0x7fff677fe700 (LWP 32145) exited] [Thread 0x7fff874e7700 (LWP 32058) exited] [New Thread 0x7fff874e7700 (LWP 32146)] [Thread 0x7fff874e7700 (LWP 32146) exited] [New Thread 0x7fff874e7700 (LWP 32147)] [Thread 0x7fff874e7700 (LWP 32147) exited] [New Thread 0x7fff874e7700 (LWP 32148)] [Thread 0x7fff874e7700 (LWP 32148) exited] [New Thread 0x7fff874e7700 (LWP 32149)] [Thread 0x7fff874e7700 (LWP 32149) exited] [New Thread 0x7fff874e7700 (LWP 32150)] [Thread 0x7fff874e7700 (LWP 32150) exited] [Thread 0x7fff657fa700 (LWP 32144) exited] [Thread 0x7fff1f7fe700 (LWP 32081) exited] [New Thread 0x7fff1f7fe700 (LWP 32151)] [Thread 0x7fff1f7fe700 (LWP 32151) exited] [New Thread 0x7fff1f7fe700 (LWP 32152)] [New Thread 0x7fff657fa700 (LWP 32153)] [New Thread 0x7fff874e7700 (LWP 32154)] [Thread 0x7fff657fa700 (LWP 32153) exited] [Thread 0x7fff874e7700 (LWP 32154) exited] [Thread 0x7fff1f7fe700 (LWP 32152) exited] [New Thread 0x7fff1f7fe700 (LWP 32155)] [New Thread 0x7fff874e7700 (LWP 32156)] [Thread 0x7fff874e7700 (LWP 32156) exited] [Thread 0x7fff1e7fc700 (LWP 32138) exited] [New Thread 0x7fff1e7fc700 (LWP 32157)] [Thread 0x7fff1f7fe700 (LWP 32155) exited] [Thread 0x7fff1e7fc700 (LWP 32157) exited] [New Thread 0x7fff1e7fc700 (LWP 32158)] [New Thread 0x7fff1f7fe700 (LWP 32159)] [Thread 0x7fff1f7fe700 (LWP 32159) exited]
+ Trace 233157
Thread 140734284572416 (LWP 32071)
Thread 1 (Thread 0x7ffff59d4a40 (LWP 32037))
*** Bug 595202 has been marked as a duplicate of this bug. ***
The problem is that e_mail_reader_parse_message_finish() didn't return any error state, which means that the EMailReader filled message preview unconditionally. Fidencio's case was that he selected a signed message, but before the signature verification was over he managed to move to another message, which filled the message preview and cancelled the ongoing signature verification. Then the verification finished (with an error) and because the error (cancellation) was not properly propagated, the EMailReader replaced the preview panel content with that cancelled verification message. Confirmed when I cheat camel code to have more time to switch between messages. Created commit 2d83d76 in evo master (3.13.9+) [1] Created commit afab9d2 in evo evolution-3-12 (3.12.10+) [1] https://git.gnome.org/browse/evolution/commit/?id=2d83d76