diff options
author | Jeffrey Stedfast <fejj@ximian.com> | 2001-10-27 07:13:20 +0800 |
---|---|---|
committer | Jeffrey Stedfast <fejj@src.gnome.org> | 2001-10-27 07:13:20 +0800 |
commit | 4d55b72adae439372f1d939937e9976c7221ca87 (patch) | |
tree | f365a5c25ad9e5235cefe96f7e204d014b521f98 /camel/providers | |
parent | d09dd29be065825b234010bb6d3fd3220c3620fe (diff) | |
download | gsoc2013-evolution-4d55b72adae439372f1d939937e9976c7221ca87.tar.gz gsoc2013-evolution-4d55b72adae439372f1d939937e9976c7221ca87.tar.zst gsoc2013-evolution-4d55b72adae439372f1d939937e9976c7221ca87.zip |
Check to make sure that the dataset is non-NULL before using and/or
2001-10-26 Jeffrey Stedfast <fejj@ximian.com>
* providers/imap/camel-imap-folder.c (imap_get_message): Check to
make sure that the dataset is non-NULL before using and/or
freeing.
svn path=/trunk/; revision=14181
Diffstat (limited to 'camel/providers')
-rw-r--r-- | camel/providers/imap/camel-imap-folder.c | 44 |
1 files changed, 25 insertions, 19 deletions
diff --git a/camel/providers/imap/camel-imap-folder.c b/camel/providers/imap/camel-imap-folder.c index d79cb33b9b..d946601bb7 100644 --- a/camel/providers/imap/camel-imap-folder.c +++ b/camel/providers/imap/camel-imap-folder.c @@ -1504,23 +1504,23 @@ imap_get_message (CamelFolder *folder, const char *uid, CamelException *ex) CamelMessageInfo *mi; CamelMimeMessage *msg; CamelStream *stream = NULL; - + /* If the server doesn't support IMAP4rev1, or we already have * the whole thing cached, fetch it in one piece. */ if (store->server_level < IMAP_LEVEL_IMAP4REV1 || (stream = camel_imap_folder_fetch_data (imap_folder, uid, "", TRUE, NULL))) return get_message_simple (imap_folder, uid, stream, ex); - + mi = camel_folder_summary_uid (folder->summary, uid); g_return_val_if_fail (mi != NULL, NULL); - + /* If the message is small, fetch it in one piece. */ if (mi->size < IMAP_SMALL_BODY_SIZE) { camel_folder_summary_info_free (folder->summary, mi); return get_message_simple (imap_folder, uid, NULL, ex); } - + /* For larger messages, fetch the structure and build a message * with offline parts. (We check mi->content->type rather than * mi->content because camel_folder_summary_info_new always creates @@ -1528,38 +1528,44 @@ imap_get_message (CamelFolder *folder, const char *uid, CamelException *ex) */ if (!mi->content->type) { CamelImapResponse *response; - GData *fetch_data; + GData *fetch_data = NULL; char *body, *found_uid; int i; - + if (camel_disco_store_status (CAMEL_DISCO_STORE (store)) == CAMEL_DISCO_STORE_OFFLINE) { camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE, _("This message is not currently available")); return NULL; } - + response = camel_imap_command (store, folder, ex, "UID FETCH %s BODY", uid); if (!response) { camel_folder_summary_info_free (folder->summary, mi); return NULL; } - + for (i = 0, body = NULL; i < response->untagged->len; i++) { fetch_data = parse_fetch_response (imap_folder, response->untagged->pdata[i]); - found_uid = g_datalist_get_data (&fetch_data, "UID"); - body = g_datalist_get_data (&fetch_data, "BODY"); - if (found_uid && body && !strcmp (found_uid, uid)) - break; - g_datalist_clear (&fetch_data); - body = NULL; + if (fetch_data) { + found_uid = g_datalist_get_data (&fetch_data, "UID"); + body = g_datalist_get_data (&fetch_data, "BODY"); + if (found_uid && body && !strcmp (found_uid, uid)) + break; + g_datalist_clear (&fetch_data); + fetch_data = NULL; + body = NULL; + } } - + if (body) imap_parse_body (&body, folder, mi->content); - g_datalist_clear (&fetch_data); + + if (fetch_data) + g_datalist_clear (&fetch_data); + camel_imap_response_free (store, response); - + if (!mi->content->type) { /* FETCH returned OK, but we didn't parse a BODY * response. Courier will return invalid BODY @@ -1571,10 +1577,10 @@ imap_get_message (CamelFolder *folder, const char *uid, CamelException *ex) return get_message_simple (imap_folder, uid, NULL, ex); } } - + msg = get_message (imap_folder, uid, "", mi->content, ex); camel_folder_summary_info_free (folder->summary, mi); - + return msg; } |