* mu-msg: better error handling for invalid messages
This commit is contained in:
32
src/mu-msg.c
32
src/mu-msg.c
@ -621,18 +621,20 @@ stream_to_string (GMimeStream *stream, size_t buflen, gboolean convert_utf8)
|
|||||||
|
|
||||||
|
|
||||||
static gchar*
|
static gchar*
|
||||||
part_to_string (GMimePart *part, gboolean convert_utf8)
|
part_to_string (GMimePart *part, gboolean convert_utf8, gboolean *err)
|
||||||
{
|
{
|
||||||
GMimeDataWrapper *wrapper;
|
GMimeDataWrapper *wrapper;
|
||||||
GMimeStream *stream = NULL;
|
GMimeStream *stream = NULL;
|
||||||
ssize_t buflen;
|
ssize_t buflen;
|
||||||
char *buffer = NULL;
|
char *buffer = NULL;
|
||||||
|
|
||||||
g_return_val_if_fail (GMIME_IS_OBJECT(part), NULL);
|
*err = TRUE;
|
||||||
|
g_return_val_if_fail (GMIME_IS_PART(part), NULL);
|
||||||
|
|
||||||
wrapper = g_mime_part_get_content_object (part);
|
wrapper = g_mime_part_get_content_object (part);
|
||||||
if (!wrapper) {
|
if (!wrapper) {
|
||||||
g_warning ("failed to create data wrapper");
|
/* this happens with invalid mails */
|
||||||
|
g_debug ("failed to create data wrapper");
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -651,6 +653,8 @@ part_to_string (GMimePart *part, gboolean convert_utf8)
|
|||||||
/* convert_to_utf8 will free the old 'buffer' if needed */
|
/* convert_to_utf8 will free the old 'buffer' if needed */
|
||||||
if (convert_utf8)
|
if (convert_utf8)
|
||||||
buffer = convert_to_utf8 (part, buffer);
|
buffer = convert_to_utf8 (part, buffer);
|
||||||
|
|
||||||
|
*err = FALSE;
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
if (stream)
|
if (stream)
|
||||||
@ -664,9 +668,11 @@ static char*
|
|||||||
get_body (MuMsg *msg, gboolean want_html)
|
get_body (MuMsg *msg, gboolean want_html)
|
||||||
{
|
{
|
||||||
GetBodyData data;
|
GetBodyData data;
|
||||||
|
char *str;
|
||||||
|
gboolean err;
|
||||||
|
|
||||||
g_return_val_if_fail (msg, NULL);
|
g_return_val_if_fail (msg, NULL);
|
||||||
g_return_val_if_fail (GMIME_IS_OBJECT(msg->_mime_msg), NULL);
|
g_return_val_if_fail (GMIME_IS_MESSAGE(msg->_mime_msg), NULL);
|
||||||
|
|
||||||
memset (&data, 0, sizeof(GetBodyData));
|
memset (&data, 0, sizeof(GetBodyData));
|
||||||
data._want_html = want_html;
|
data._want_html = want_html;
|
||||||
@ -675,13 +681,21 @@ get_body (MuMsg *msg, gboolean want_html)
|
|||||||
(GMimeObjectForeachFunc)get_body_cb,
|
(GMimeObjectForeachFunc)get_body_cb,
|
||||||
&data);
|
&data);
|
||||||
if (want_html)
|
if (want_html)
|
||||||
return data._html_part ?
|
str = data._html_part ?
|
||||||
part_to_string (GMIME_PART(data._html_part), FALSE) :
|
part_to_string (GMIME_PART(data._html_part), FALSE, &err) :
|
||||||
NULL;
|
NULL;
|
||||||
else
|
else
|
||||||
return data._txt_part ?
|
str = data._txt_part ?
|
||||||
part_to_string (GMIME_PART(data._txt_part), TRUE) :
|
part_to_string (GMIME_PART(data._txt_part), TRUE, &err) :
|
||||||
NULL;
|
NULL;
|
||||||
|
|
||||||
|
/* note, str may be NULL (no body), but that's not necessarily
|
||||||
|
* an error; we only warn when an actual error occured */
|
||||||
|
if (err)
|
||||||
|
g_warning ("error occured while retrieving body for message %s",
|
||||||
|
mu_msg_get_path(msg));
|
||||||
|
|
||||||
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char*
|
const char*
|
||||||
|
|||||||
Reference in New Issue
Block a user