[geary/mjog/server-quirks: 4/4] imap: Ignore UIDNEXT 0 values sent from servers
- From: Michael Gratton <mjog src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [geary/mjog/server-quirks: 4/4] imap: Ignore UIDNEXT 0 values sent from servers
- Date: Sat, 2 May 2020 07:19:24 +0000 (UTC)
commit 9fbdd8f7c757fe5271a961a2b8171fa8b4aa2fba
Author: Michael Gratton <mike vee net>
Date: Wed Mar 18 23:59:35 2020 +1100
imap: Ignore UIDNEXT 0 values sent from servers
Some mail servers e.g hMailServer and whatever is used by home.pl
(dovecot?) sends UIDNEXT 0. Just ignore these since there nothing else
that can be done.
See #711
src/engine/imap/api/imap-folder-session.vala | 15 ++++++++++++++-
src/engine/imap/response/imap-status-data.vala | 21 ++++++++++++++++++---
2 files changed, 32 insertions(+), 4 deletions(-)
---
diff --git a/src/engine/imap/api/imap-folder-session.vala b/src/engine/imap/api/imap-folder-session.vala
index d1450755..5b3953c7 100644
--- a/src/engine/imap/api/imap-folder-session.vala
+++ b/src/engine/imap/api/imap-folder-session.vala
@@ -248,7 +248,20 @@ private class Geary.Imap.FolderSession : Geary.Imap.SessionObject {
break;
case ResponseCodeType.UIDNEXT:
- this.folder.properties.uid_next = response_code.get_uid_next();
+ try {
+ this.folder.properties.uid_next = response_code.get_uid_next();
+ } catch (ImapError.INVALID err) {
+ // Some mail servers e.g hMailServer and
+ // whatever is used by home.pl (dovecot?)
+ // sends UIDNEXT 0. Just ignore these since
+ // there nothing else that can be done. See
+ // GNOME/geary#711
+ if (response_code.get_as_string(1).as_int64() == 0) {
+ warning("Ignoring bad UIDNEXT 0 from server");
+ } else {
+ throw err;
+ }
+ }
break;
case ResponseCodeType.UIDVALIDITY:
diff --git a/src/engine/imap/response/imap-status-data.vala b/src/engine/imap/response/imap-status-data.vala
index 9c1786e9..40d897f9 100644
--- a/src/engine/imap/response/imap-status-data.vala
+++ b/src/engine/imap/response/imap-status-data.vala
@@ -101,7 +101,20 @@ public class Geary.Imap.StatusData : Object {
break;
case StatusDataType.UIDNEXT:
- uid_next = new UID.checked(valuep.as_int64());
+ try {
+ uid_next = new UID.checked(valuep.as_int64());
+ } catch (ImapError.INVALID err) {
+ // Some mail servers e.g hMailServer and
+ // whatever is used by home.pl (dovecot?)
+ // sends UIDNEXT 0. Just ignore these
+ // since there nothing else that can be
+ // done. See GNOME/geary#711
+ if (valuep.as_int64() == 0) {
+ warning("Ignoring bad UIDNEXT 0 from server");
+ } else {
+ throw err;
+ }
+ }
break;
case StatusDataType.UIDVALIDITY:
@@ -118,8 +131,10 @@ public class Geary.Imap.StatusData : Object {
break;
}
} catch (ImapError ierr) {
- message("Bad value at %d/%d in STATUS response \"%s\": %s", ctr, ctr + 1,
- server_data.to_string(), ierr.message);
+ warning(
+ "Bad value at %d/%d in STATUS response \"%s\": %s",
+ ctr, ctr + 1, server_data.to_string(), ierr.message
+ );
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]