diff --git a/src/engine/imap/transport/imap-deserializer.vala b/src/engine/imap/transport/imap-deserializer.vala index 559a5e78..90c83549 100644 --- a/src/engine/imap/transport/imap-deserializer.vala +++ b/src/engine/imap/transport/imap-deserializer.vala @@ -562,6 +562,12 @@ public class Geary.Imap.Deserializer : BaseObject, Logging.Source { char ch = *((char *) user); switch (ch) { case '[': + // "[" is a valid character for flags (and used by Gmail) + if (this.is_parsing_flags) { + append_to_string(ch); + return State.FLAG; + } + // open response code ResponseCode response_code = new ResponseCode(); push(response_code); diff --git a/test/engine/imap/transport/imap-deserializer-test.vala b/test/engine/imap/transport/imap-deserializer-test.vala index e5e642df..b4f62305 100644 --- a/test/engine/imap/transport/imap-deserializer-test.vala +++ b/test/engine/imap/transport/imap-deserializer-test.vala @@ -273,7 +273,7 @@ class Geary.Imap.DeserializerTest : TestCase { public void gmail_broken_flags() throws GLib.Error { // As of 2020-05-01, GMail does not correctly quote email // flags. See #746 - string flags = """* FLAGS (\Answered \Flagged \Draft \Deleted \Seen $Forwarded $MDNSent $NotPhishing $Phishing Junk LoadRemoteImages NonJunk OIB-Seen-INBOX OIB-Seen-Unsubscribe OIB-Seen-[Gmail]/Important OIB-Seen-[Gmail]/Spam OIB-Seen-[Gmail]/Tous les messages)"""; + string flags = """* FLAGS (\Answered \Flagged \Draft \Deleted \Seen $Forwarded $MDNSent $NotPhishing $Phishing Junk LoadRemoteImages NonJunk OIB-Seen-INBOX OIB-Seen-Unsubscribe [GMail]/Sent_Mail OIB-Seen-[Gmail]/Important OIB-Seen-[Gmail]/Spam OIB-Seen-[Gmail]/Tous les messages)"""; this.stream.add_data(flags.data); this.stream.add_data(EOL.data); this.deser.quirks = new Imap.Quirks();