2006-12-26 [colin] 2.6.1cvs74
authorColin Leroy <colin@colino.net>
Tue, 26 Dec 2006 21:30:48 +0000 (21:30 +0000)
committerColin Leroy <colin@colino.net>
Tue, 26 Dec 2006 21:30:48 +0000 (21:30 +0000)
* src/etpan/imap-thread.c
Fix bug 1081, 'claws-mail
segfaults when going offline
while it transfers mails via
imap'

ChangeLog
PATCHSETS
configure.ac
src/etpan/imap-thread.c

index fc2d05c0006529732e60974da94b24f854df3c98..391e99af7eac7961e299a8db31e77b561db8173f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2006-12-26 [colin]     2.6.1cvs74
+
+       * src/etpan/imap-thread.c
+               Fix bug 1081, 'claws-mail 
+               segfaults when going offline 
+               while it transfers mails via 
+               imap'
+
 2006-12-26 [colin]     2.6.1cvs73
 
        * src/folder_item_prefs.c
 2006-12-26 [colin]     2.6.1cvs73
 
        * src/folder_item_prefs.c
index 7074789e560b0f1a8092abe5d3f255b73347d409..086267989910b2b2351d75ded23ae774b755f5b5 100644 (file)
--- a/PATCHSETS
+++ b/PATCHSETS
 ( cvs diff -u -r 1.1.2.44 -r 1.1.2.45 src/wizard.c;  ) > 2.6.1cvs71.patchset
 ( cvs diff -u -r 1.2.2.14 -r 1.2.2.15 src/folder_item_prefs.c;  ) > 2.6.1cvs72.patchset
 ( cvs diff -u -r 1.2.2.15 -r 1.2.2.16 src/folder_item_prefs.c;  ) > 2.6.1cvs73.patchset
 ( cvs diff -u -r 1.1.2.44 -r 1.1.2.45 src/wizard.c;  ) > 2.6.1cvs71.patchset
 ( cvs diff -u -r 1.2.2.14 -r 1.2.2.15 src/folder_item_prefs.c;  ) > 2.6.1cvs72.patchset
 ( cvs diff -u -r 1.2.2.15 -r 1.2.2.16 src/folder_item_prefs.c;  ) > 2.6.1cvs73.patchset
+( cvs diff -u -r 1.1.4.59 -r 1.1.4.60 src/etpan/imap-thread.c;  ) > 2.6.1cvs74.patchset
index 1a0bc030761e03c86ad5f1a977f720b0a6ac761a..eb76f1fa8fbd997ce92f2be2d10597471c03d69d 100644 (file)
@@ -11,7 +11,7 @@ MINOR_VERSION=6
 MICRO_VERSION=1
 INTERFACE_AGE=0
 BINARY_AGE=0
 MICRO_VERSION=1
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=73
+EXTRA_VERSION=74
 EXTRA_RELEASE=
 EXTRA_GTK2_VERSION=
 
 EXTRA_RELEASE=
 EXTRA_GTK2_VERSION=
 
index 913c00f511dc3c8838808d0fc7c74616986ab897..686a4609992321b4f92d045f10c3eb727150be22 100644 (file)
@@ -379,6 +379,13 @@ struct connect_result {
        int error;
 };
 
        int error;
 };
 
+#define CHECK_IMAP() {                                         \
+       if (!param->imap) {                                     \
+               result->error = MAILIMAP_ERROR_BAD_STATE;       \
+               return;                                         \
+       }                                                       \
+}
+
 static void connect_run(struct etpan_thread_op * op)
 {
        int r;
 static void connect_run(struct etpan_thread_op * op)
 {
        int r;
@@ -388,6 +395,8 @@ static void connect_run(struct etpan_thread_op * op)
        param = op->param;
        result = op->result;
        
        param = op->param;
        result = op->result;
        
+       CHECK_IMAP();
+
        r = mailimap_socket_connect(param->imap,
                                    param->server, param->port);
        
        r = mailimap_socket_connect(param->imap,
                                    param->server, param->port);
        
@@ -459,6 +468,8 @@ static void connect_ssl_run(struct etpan_thread_op * op)
        param = op->param;
        result = op->result;
        
        param = op->param;
        result = op->result;
        
+       CHECK_IMAP();
+
        r = mailimap_ssl_connect(param->imap,
                                 param->server, param->port);
        result->error = r;
        r = mailimap_ssl_connect(param->imap,
                                 param->server, param->port);
        result->error = r;
@@ -521,6 +532,8 @@ static void capability_run(struct etpan_thread_op * op)
        param = op->param;
        result = op->result;
        
        param = op->param;
        result = op->result;
        
+       CHECK_IMAP();
+
        r = mailimap_capability(param->imap, &caps);
        
        result->error = r;
        r = mailimap_capability(param->imap, &caps);
        
        result->error = r;
@@ -566,6 +579,8 @@ static void disconnect_run(struct etpan_thread_op * op)
        param = op->param;
        result = op->result;
        
        param = op->param;
        result = op->result;
        
+       CHECK_IMAP();
+
        r = mailimap_logout(param->imap);
        
        result->error = r;
        r = mailimap_logout(param->imap);
        
        result->error = r;
@@ -624,6 +639,9 @@ static void list_run(struct etpan_thread_op * op)
        clist * list;
        
        param = op->param;
        clist * list;
        
        param = op->param;
+
+       CHECK_IMAP();
+
        list = NULL;
        r = mailimap_list(param->imap, param->base,
                          param->wildcard, &list);
        list = NULL;
        r = mailimap_list(param->imap, param->base,
                          param->wildcard, &list);
@@ -681,6 +699,8 @@ static void login_run(struct etpan_thread_op * op)
        
        param = op->param;
        
        
        param = op->param;
        
+       CHECK_IMAP();
+
 #ifdef DISABLE_LOG_DURING_LOGIN
        old_debug = mailstream_debug;
        mailstream_debug = 0;
 #ifdef DISABLE_LOG_DURING_LOGIN
        old_debug = mailstream_debug;
        mailstream_debug = 0;
@@ -753,6 +773,8 @@ static void status_run(struct etpan_thread_op * op)
        param = op->param;
        result = op->result;
        
        param = op->param;
        result = op->result;
        
+       CHECK_IMAP();
+
        r = mailimap_status(param->imap, param->mb,
                            param->status_att_list,
                            &result->data_status);
        r = mailimap_status(param->imap, param->mb,
                            param->status_att_list,
                            &result->data_status);
@@ -824,6 +846,9 @@ static void noop_run(struct etpan_thread_op * op)
        int r;
        
        param = op->param;
        int r;
        
        param = op->param;
+
+       CHECK_IMAP();
+
        r = mailimap_noop(param->imap);
        
        result = op->result;
        r = mailimap_noop(param->imap);
        
        result = op->result;
@@ -868,6 +893,9 @@ static void starttls_run(struct etpan_thread_op * op)
        int r;
 
        param = op->param;
        int r;
 
        param = op->param;
+
+       CHECK_IMAP();
+
        r = mailimap_starttls(param->imap);
        
        result = op->result;
        r = mailimap_starttls(param->imap);
        
        result = op->result;
@@ -944,6 +972,9 @@ static void create_run(struct etpan_thread_op * op)
        int r;
        
        param = op->param;
        int r;
        
        param = op->param;
+
+       CHECK_IMAP();
+
        r = mailimap_create(param->imap, param->mb);
        
        result = op->result;
        r = mailimap_create(param->imap, param->mb);
        
        result = op->result;
@@ -988,6 +1019,9 @@ static void rename_run(struct etpan_thread_op * op)
        int r;
        
        param = op->param;
        int r;
        
        param = op->param;
+
+       CHECK_IMAP();
+
        r = mailimap_rename(param->imap, param->mb, param->new_name);
        
        result = op->result;
        r = mailimap_rename(param->imap, param->mb, param->new_name);
        
        result = op->result;
@@ -1033,6 +1067,9 @@ static void delete_run(struct etpan_thread_op * op)
        int r;
        
        param = op->param;
        int r;
        
        param = op->param;
+
+       CHECK_IMAP();
+
        r = mailimap_delete(param->imap, param->mb);
        
        result = op->result;
        r = mailimap_delete(param->imap, param->mb);
        
        result = op->result;
@@ -1075,6 +1112,9 @@ static void select_run(struct etpan_thread_op * op)
        int r;
        
        param = op->param;
        int r;
        
        param = op->param;
+
+       CHECK_IMAP();
+
        r = mailimap_select(param->imap, param->mb);
        
        result = op->result;
        r = mailimap_select(param->imap, param->mb);
        
        result = op->result;
@@ -1132,6 +1172,9 @@ static void examine_run(struct etpan_thread_op * op)
        int r;
        
        param = op->param;
        int r;
        
        param = op->param;
+
+       CHECK_IMAP();
+
        r = mailimap_examine(param->imap, param->mb);
        
        result = op->result;
        r = mailimap_examine(param->imap, param->mb);
        
        result = op->result;
@@ -1217,6 +1260,8 @@ static void search_run(struct etpan_thread_op * op)
        
        param = op->param;
        
        
        param = op->param;
        
+       CHECK_IMAP();
+
        /* we copy the mailimap_set because freeing the key is recursive */
        if (param->set != NULL) {
                uid_key = mailimap_search_key_new_uid(sc_mailimap_set_copy(param->set));
        /* we copy the mailimap_set because freeing the key is recursive */
        if (param->set != NULL) {
                uid_key = mailimap_search_key_new_uid(sc_mailimap_set_copy(param->set));
@@ -1493,6 +1538,8 @@ static void fetch_uid_run(struct etpan_thread_op * op)
        
        param = op->param;
        
        
        param = op->param;
        
+       CHECK_IMAP();
+
        fetch_result = NULL;
        r = imap_get_messages_list(param->imap, param->first_index,
                                   &fetch_result);
        fetch_result = NULL;
        r = imap_get_messages_list(param->imap, param->first_index,
                                   &fetch_result);
@@ -1771,6 +1818,8 @@ static void fetch_content_run(struct etpan_thread_op * op)
        
        param = op->param;
        
        
        param = op->param;
        
+       CHECK_IMAP();
+
        content = NULL;
        content_size = 0;
        if (param->with_body)
        content = NULL;
        content_size = 0;
        if (param->with_body)
@@ -2146,6 +2195,8 @@ static void fetch_env_run(struct etpan_thread_op * op)
        
        param = op->param;
        
        
        param = op->param;
        
+       CHECK_IMAP();
+
        env_list = NULL;
        r = imap_get_envelopes_list(param->imap, param->set,
                                    &env_list);
        env_list = NULL;
        r = imap_get_envelopes_list(param->imap, param->set,
                                    &env_list);
@@ -2243,6 +2294,8 @@ static void append_run(struct etpan_thread_op * op)
        param = op->param;
        result = op->result;
        
        param = op->param;
        result = op->result;
        
+       CHECK_IMAP();
+
        r = stat(param->filename, &stat_buf);
        if (r < 0) {
                result->error = MAILIMAP_ERROR_APPEND;
        r = stat(param->filename, &stat_buf);
        if (r < 0) {
                result->error = MAILIMAP_ERROR_APPEND;
@@ -2326,6 +2379,9 @@ static void expunge_run(struct etpan_thread_op * op)
        int r;
        
        param = op->param;
        int r;
        
        param = op->param;
+
+       CHECK_IMAP();
+
        r = mailimap_expunge(param->imap);
        
        result = op->result;
        r = mailimap_expunge(param->imap);
        
        result = op->result;
@@ -2368,9 +2424,12 @@ static void copy_run(struct etpan_thread_op * op)
        struct copy_result * result;
        int r;
        guint32 val;
        struct copy_result * result;
        int r;
        guint32 val;
-       param = op->param;
        struct mailimap_set *source = NULL, *dest = NULL;
        struct mailimap_set *source = NULL, *dest = NULL;
+
+       param = op->param;
        
        
+       CHECK_IMAP();
+
        r = mailimap_uidplus_uid_copy(param->imap, param->set, param->mb,
                &val, &source, &dest);
        
        r = mailimap_uidplus_uid_copy(param->imap, param->set, param->mb,
                &val, &source, &dest);
        
@@ -2436,6 +2495,8 @@ static void store_run(struct etpan_thread_op * op)
        
        param = op->param;
        
        
        param = op->param;
        
+       CHECK_IMAP();
+
        r = mailimap_uid_store(param->imap, param->set,
                               param->store_att_flags);
        
        r = mailimap_uid_store(param->imap, param->set,
                               param->store_att_flags);
        
@@ -2624,6 +2685,8 @@ static void connect_cmd_run(struct etpan_thread_op * op)
        param = op->param;
        result = op->result;
        
        param = op->param;
        result = op->result;
        
+       CHECK_IMAP();
+
        r = socket_connect_cmd(param->imap, param->command,
                               param->server, param->port);
        
        r = socket_connect_cmd(param->imap, param->command,
                               param->server, param->port);