aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--camel/ChangeLog8
-rw-r--r--camel/providers/imap/camel-imap-folder.c14
-rw-r--r--camel/providers/imap/camel-imap-store.c2
3 files changed, 20 insertions, 4 deletions
diff --git a/camel/ChangeLog b/camel/ChangeLog
index 9a7563608d..4420b1fde2 100644
--- a/camel/ChangeLog
+++ b/camel/ChangeLog
@@ -1,5 +1,13 @@
2002-05-24 Jeffrey Stedfast <fejj@ximian.com>
+ * providers/imap/camel-imap-folder.c (content_info_get_part_spec):
+ Helps if we allocate enough space here. Also, start smoking the
+ same purple flavoured IMAP crack when counting parts (parts don't
+ count if their parent part is a message/* part with a parent
+ part). Fixes bug #25260.
+
+2002-05-24 Jeffrey Stedfast <fejj@ximian.com>
+
* providers/imap/camel-imap-command.c (imap_read_untagged): Use
the new readline function.
diff --git a/camel/providers/imap/camel-imap-folder.c b/camel/providers/imap/camel-imap-folder.c
index f8d3a59594..0b9f785d21 100644
--- a/camel/providers/imap/camel-imap-folder.c
+++ b/camel/providers/imap/camel-imap-folder.c
@@ -1526,6 +1526,12 @@ content_info_get_part_spec (CamelMessageContentInfo *ci)
while (node->parent) {
CamelMessageContentInfo *child;
+ /* FIXME: is this only supposed to apply if 'node' is a multipart? */
+ if (node->parent->parent && header_content_type_is (node->parent->type, "message", "*")) {
+ node = node->parent;
+ continue;
+ }
+
child = node->parent->childs;
for (part = 1; child; part++) {
if (child == node)
@@ -1536,7 +1542,7 @@ content_info_get_part_spec (CamelMessageContentInfo *ci)
part_spec_push (&stack, part);
- len++;
+ len += 2;
while ((part = part / 10))
len++;
@@ -1581,7 +1587,7 @@ get_content (CamelImapFolder *imap_folder, const char *uid,
camel_multipart_set_boundary (body_mp, NULL);
speclen = strlen (part_spec);
- child_spec = g_malloc (speclen + 16);
+ child_spec = g_malloc (speclen + 17); /* dot + 10 + dot + MIME + nul */
memcpy (child_spec, part_spec, speclen);
if (speclen > 0)
child_spec[speclen++] = '.';
@@ -1607,9 +1613,10 @@ get_content (CamelImapFolder *imap_folder, const char *uid,
content = get_content (imap_folder, uid, part, ci, ex);
}
+
if (!stream || !content) {
- g_free (child_spec);
camel_object_unref (CAMEL_OBJECT (body_mp));
+ g_free (child_spec);
return NULL;
}
@@ -1620,6 +1627,7 @@ get_content (CamelImapFolder *imap_folder, const char *uid,
ci = ci->next;
}
+
g_free (child_spec);
return (CamelDataWrapper *)body_mp;
diff --git a/camel/providers/imap/camel-imap-store.c b/camel/providers/imap/camel-imap-store.c
index b97f8c0f1a..f45531145d 100644
--- a/camel/providers/imap/camel-imap-store.c
+++ b/camel/providers/imap/camel-imap-store.c
@@ -2271,7 +2271,7 @@ camel_imap_store_readline (CamelImapStore *store, char **dest, CamelException *e
#if d(!)0
if (camel_verbose_debug) {
fprintf (stderr, "received: ");
- fwrite (*dest, 1, nread, stderr);
+ fwrite (ba->data, 1, ba->len, stderr);
}
#endif