Skip to content

Commit 2690700

Browse files
committed
mod_mimeparse: Return NULL in bbs_mime_message_parse if mk_mime fails.
Do not return an "empty" mime container if mk_mime fails, since this will lead to a NULL dereference later inside bbs_mime_make_bodystructure. This could occur if analyzing invalid maildir files, such as swap files, inside the maildir "cur" directory. While resulting behavior will not be correct since swap files should not be present (or should be ignored if present), this should at least avoid a crash. LBBS-146 #close
1 parent d360dff commit 2690700

1 file changed

Lines changed: 13 additions & 2 deletions

File tree

modules/mod_mimeparse.c

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -382,11 +382,22 @@ struct bbs_mime_message {
382382

383383
struct bbs_mime_message *bbs_mime_message_parse(const char *filename)
384384
{
385-
struct bbs_mime_message *mime = malloc(sizeof(*mime));
385+
GMimeMessage *message;
386+
struct bbs_mime_message *mime;
387+
388+
/* This is more likely to fail, so do it first before allocating the container */
389+
message = mk_mime(filename);
390+
if (!message) {
391+
/* Return NULL if we failed here, since bbs_mime_make_bodystructure expects mime->message to be non-NULL */
392+
return NULL;
393+
}
394+
395+
mime = malloc(sizeof(*mime));
386396
if (ALLOC_FAILURE(mime)) {
397+
g_object_unref(message);
387398
return NULL;
388399
}
389-
mime->message = mk_mime(filename);
400+
mime->message = message;
390401
return mime;
391402
}
392403

0 commit comments

Comments
 (0)