Package: claws-mail
Version: 3.14.1-1.1
Severity: normal
Dear Maintainer,
The IMAP UIDs on one of my folders has increased to more than 2^31
which is causing claws-mail to repeatedly complain:
> folder.c:2265:Removed message 2147483647 from cache.
Upon examining folder.c I notice that, while cache_max_num,
folder_max_num, cache_cur_num and folder_cur_num ARE stored as unsigned
int (guint), in certain situations G_MAXINT is used as an "invalid
value". The attached patch changes this to G_MAXUINT. The patch also
changes usage of GPOINTER_TO_INT and GINT_TO_POINTER to their unsigned
variants.
-- System Information:
Debian Release: stretch/sid
APT prefers testing
APT policy: (990, 'testing'), (500, 'unstable'), (500, 'stable'), (1,
'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: i386
Kernel: Linux 4.8.0-1-amd64 (SMP w/2 CPU cores)
Locale: LANG=en_GB.utf8, LC_CTYPE=en_GB.utf8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
Versions of packages claws-mail depends on:
ii libatk1.0-0 2.22.0-1
ii libc62.24-5
ii libcairo21.14.6-1.1
ii libcompfaceg11:1.5.2-5
ii libdb5.3 5.3.28-12
ii libdbus-1-3 1.10.12-1
ii libdbus-glib-1-2 0.108-1
ii libenchant1c2a 1.6.0-11+b1
ii libetpan17 1.6-2
ii libfontconfig1 2.11.0-6.7
ii libfreetype6 2.6.3-3+b1
ii libgdk-pixbuf2.0-0 2.36.0-1
ii libglib2.0-0 2.50.2-1
ii libgnutls30 3.5.6-4
ii libgtk2.0-0 2.24.31-1
ii libice6 2:1.0.9-1+b1
ii libldap-2.4-22.4.44+dfsg-1
ii liblockfile1 1.09-6
ii libpango-1.0-0 1.40.3-3
ii libpangocairo-1.0-0 1.40.3-3
ii libpangoft2-1.0-01.40.3-3
ii libpisock9 0.12.5-dfsg-2+b2
ii libsasl2-2 2.1.27~72-g88d82a3+dfsg-1
ii libsm6 2:1.2.2-1+b1
ii xdg-utils1.1.1-1
ii zlib1g 1:1.2.8.dfsg-2+b3
Versions of packages claws-mail recommends:
pn aspell-en | aspell-dictionary
ii claws-mail-i18n3.14.1-1.1
ii xfonts-100dpi 1:1.0.4+nmu1
Versions of packages claws-mail suggests:
ii chromium [www-browser] 53.0.2785.143-1
pn claws-mail-doc
pn claws-mail-tools
ii firefox-esr [www-browser] 45.5.0esr-1
pn gedit | kwrite | mousepad | nedit
ii lynx [www-browser] 2.8.9dev11-1
-- no debconf information
diff -ur claws-mail-3.14.1.orig/src/folder.c claws-mail-3.14.1/src/folder.c
--- claws-mail-3.14.1.orig/src/folder.c 2016-11-28 19:28:22.869928915 +
+++ claws-mail-3.14.1/src/folder.c 2016-11-28 21:05:12.490606898 +
@@ -2196,22 +2196,22 @@
cache_list_last = g_slist_last(cache_list);
cache_max_num = ((MsgInfo *)cache_list_last->data)->msgnum;
} else {
- cache_cur_num = G_MAXINT;
+ cache_cur_num = G_MAXUINT;
cache_max_num = 0;
}
if (folder_list_cur != NULL) {
GSList *folder_list_last;
- folder_cur_num = GPOINTER_TO_INT(folder_list_cur->data);
+ folder_cur_num = GPOINTER_TO_UINT(folder_list_cur->data);
folder_list_last = g_slist_last(folder_list);
- folder_max_num = GPOINTER_TO_INT(folder_list_last->data);
+ folder_max_num = GPOINTER_TO_UINT(folder_list_last->data);
} else {
- folder_cur_num = G_MAXINT;
+ folder_cur_num = G_MAXUINT;
folder_max_num = 0;
}
- while ((cache_cur_num != G_MAXINT) || (folder_cur_num != G_MAXINT)) {
+ while ((cache_cur_num != G_MAXUINT) || (folder_cur_num != G_MAXUINT)) {
/*
* Message only exists in the folder
* Remember message for fetching
@@ -2240,8 +2240,8 @@
}
if (add) {
-new_list = g_slist_prepend(new_list, GINT_TO_POINTER(folder_cur_num));
-debug_print("Remembered message %d for fetching\n", folder_cur_num);
+new_list = g_slist_prepend(new_list, GUINT_TO_POINTER(folder_cur_num));
+debug_print("Remembered message %u for fetching\n", folder_cur_num);
}
/* Move to next folder number */
@@ -2249,9 +2249,9 @@
folder_list_cur = folder_list_cur->next;
if (folder_list_cur != NULL)
-folder_cur_num = GPOINTER_TO_INT(folder_list_cur->data);
+folder_cur_num = GPOINTER_TO_UINT(folder_list_cur->data);
else
-folder_cur_num = G_MAXINT;
+folder_cur_num = G_MAXUINT;
continue;
}
@@ -2262,7 +2262,7 @@
*/
if (cache_cur_num < folder_cur_num) {
msgcache_remove_msg(item->cache, cache_cur_num);
- debug_print("Removed message %d from cache.\n", cache_cur_num);
+ debug_print("Removed message %u from cache.\n", cache_cur_num);
/* Move to next cache number */
if (cache_list_cur)
@@ -2271,7 +2271,7 @@
if (cache_list_cur != NULL)
cache_cur_num = ((MsgInfo *)cache_list_cur->data)->msgnum;
else
-cache_cur_num = G_MAXINT;
+cache_cur_num = G_MAXUINT;
update_flags |= F_ITEM_UPDATE_MSGCNT | F_ITEM_UPDATE_CONTENT;
@@ -2291,7 +2291,7 @@
new_list =