Handle broken multipart/signed parts such as where the signature part is
2002-04-17 Jeffrey Stedfast <fejj@ximian.com> * mail-format.c (handle_multipart_signed): Handle broken multipart/signed parts such as where the signature part is not the last part (as it should be). Fixes bug #23583. * folder-browser.c (message_list_drag_data_get): Free the temp GByteArrays. (setup_popup_icons): Connect to the destroy signal on the pixmap objects using gtk_object_unref as the callback - this way when the popup menu gets destroyed, the pixmaps clean themselves up. (on_right_click): Same idea for the label_menu. svn path=/trunk/; revision=16494
This commit is contained in:

committed by
Jeffrey Stedfast

parent
d89c3d0a9c
commit
fee3cf83f6
@ -1,3 +1,16 @@
|
|||||||
|
2002-04-17 Jeffrey Stedfast <fejj@ximian.com>
|
||||||
|
|
||||||
|
* mail-format.c (handle_multipart_signed): Handle broken
|
||||||
|
multipart/signed parts such as where the signature part is not the
|
||||||
|
last part (as it should be). Fixes bug #23583.
|
||||||
|
|
||||||
|
* folder-browser.c (message_list_drag_data_get): Free the temp
|
||||||
|
GByteArrays.
|
||||||
|
(setup_popup_icons): Connect to the destroy signal on the pixmap
|
||||||
|
objects using gtk_object_unref as the callback - this way when the
|
||||||
|
popup menu gets destroyed, the pixmaps clean themselves up.
|
||||||
|
(on_right_click): Same idea for the label_menu.
|
||||||
|
|
||||||
2002-04-17 Jeffrey Stedfast <fejj@ximian.com>
|
2002-04-17 Jeffrey Stedfast <fejj@ximian.com>
|
||||||
|
|
||||||
* mail-local.c (mail_local_folder_construct): Just use g_basename.
|
* mail-local.c (mail_local_folder_construct): Just use g_basename.
|
||||||
|
@ -381,7 +381,7 @@ message_list_drag_data_get (ETree *tree, int row, ETreePath path, int col,
|
|||||||
gtk_selection_data_set (selection_data, selection_data->target, 8,
|
gtk_selection_data_set (selection_data, selection_data->target, 8,
|
||||||
bytes->data, bytes->len);
|
bytes->data, bytes->len);
|
||||||
|
|
||||||
g_byte_array_free (bytes, FALSE);
|
g_byte_array_free (bytes, TRUE);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case DND_TARGET_TYPE_X_EVOLUTION_MESSAGE:
|
case DND_TARGET_TYPE_X_EVOLUTION_MESSAGE:
|
||||||
@ -409,7 +409,7 @@ message_list_drag_data_get (ETree *tree, int row, ETreePath path, int col,
|
|||||||
gtk_selection_data_set (selection_data, selection_data->target, 8,
|
gtk_selection_data_set (selection_data, selection_data->target, 8,
|
||||||
array->data, array->len);
|
array->data, array->len);
|
||||||
|
|
||||||
g_byte_array_free (array, FALSE);
|
g_byte_array_free (array, TRUE);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -1731,6 +1731,8 @@ setup_popup_icons (void)
|
|||||||
|
|
||||||
filename = g_strdup_printf ("%s/%s", EVOLUTION_IMAGES, context_pixmaps[i]);
|
filename = g_strdup_printf ("%s/%s", EVOLUTION_IMAGES, context_pixmaps[i]);
|
||||||
context_menu[i].pixmap = gnome_pixmap_new_from_file (filename);
|
context_menu[i].pixmap = gnome_pixmap_new_from_file (filename);
|
||||||
|
gtk_signal_connect (GTK_OBJECT (context_menu[i].pixmap), "destroy",
|
||||||
|
gtk_object_unref, NULL);
|
||||||
g_free (filename);
|
g_free (filename);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1962,11 +1964,14 @@ on_right_click (ETree *tree, gint row, ETreePath path, gint col, GdkEvent *event
|
|||||||
label_menu[i + 2].name = e_utf8_to_locale_string (mail_config_get_label_name (i));
|
label_menu[i + 2].name = e_utf8_to_locale_string (mail_config_get_label_name (i));
|
||||||
label_menu[i + 2].pixmap = gtk_pixmap_new (pixmap, NULL);
|
label_menu[i + 2].pixmap = gtk_pixmap_new (pixmap, NULL);
|
||||||
label_menu[i + 2].closure = closure;
|
label_menu[i + 2].closure = closure;
|
||||||
|
|
||||||
|
gtk_signal_connect (GTK_OBJECT (label_menu[i].pixmap), "destroy",
|
||||||
|
gtk_object_unref, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
setup_popup_icons ();
|
setup_popup_icons ();
|
||||||
|
|
||||||
for (i=0;i<sizeof(filter_menu)/sizeof(filter_menu[0]);i++)
|
for (i = 0; i < sizeof (filter_menu) / sizeof (filter_menu[0]); i++)
|
||||||
filter_menu[i].closure = fdata;
|
filter_menu[i].closure = fdata;
|
||||||
|
|
||||||
menu = e_popup_menu_create (context_menu, enable_mask, hide_mask, fb);
|
menu = e_popup_menu_create (context_menu, enable_mask, hide_mask, fb);
|
||||||
|
@ -1763,22 +1763,34 @@ handle_multipart_signed (CamelMimePart *part, const char *mime_type,
|
|||||||
|
|
||||||
g_return_val_if_fail (CAMEL_IS_MULTIPART (wrapper), FALSE);
|
g_return_val_if_fail (CAMEL_IS_MULTIPART (wrapper), FALSE);
|
||||||
|
|
||||||
/* Display all the subparts (there should be only 1)
|
/* Display all the subparts (there should be only 1) up to, but not including,
|
||||||
* except the signature (last part).
|
* the signature. (this should be the last part but we all know that most
|
||||||
|
* mailers are broken, so attempt to handle broken multipart/signed messages).
|
||||||
|
* See bug #23583 for details.
|
||||||
*/
|
*/
|
||||||
mp = CAMEL_MULTIPART (wrapper);
|
mp = CAMEL_MULTIPART (wrapper);
|
||||||
|
|
||||||
nparts = camel_multipart_get_number (mp);
|
nparts = camel_multipart_get_number (mp);
|
||||||
for (i = 0; i < nparts - 1; i++) {
|
for (i = 0; i < nparts; i++) {
|
||||||
if (i != 0 && output)
|
CamelContentType *content_type;
|
||||||
write_hr (html, stream);
|
|
||||||
|
|
||||||
subpart = camel_multipart_get_part (mp, i);
|
subpart = camel_multipart_get_part (mp, i);
|
||||||
|
content_type = camel_mime_part_get_content_type (subpart);
|
||||||
|
|
||||||
|
if (header_content_type_is (content_type, "application", "pgp-signature"))
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (i != 0 && output)
|
||||||
|
write_hr (html, stream);
|
||||||
|
|
||||||
output = format_mime_part (subpart, md, html, stream);
|
output = format_mime_part (subpart, md, html, stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
subpart = camel_multipart_get_part (mp, i);
|
if (i >= nparts) {
|
||||||
|
/* no signature part? wtf? */
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
mail_part_set_default_displayed_inline (subpart, md, FALSE);
|
mail_part_set_default_displayed_inline (subpart, md, FALSE);
|
||||||
|
|
||||||
if (!mail_part_is_displayed_inline (subpart, md) && !md->printing) {
|
if (!mail_part_is_displayed_inline (subpart, md) && !md->printing) {
|
||||||
@ -1852,6 +1864,17 @@ handle_multipart_signed (CamelMimePart *part, const char *mime_type,
|
|||||||
camel_cipher_validity_free (valid);
|
camel_cipher_validity_free (valid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* continuation of handling broken multipart/signed
|
||||||
|
* parts... write out any extra parts that were added after
|
||||||
|
* the signature part. */
|
||||||
|
for (i++; i < nparts; i++) {
|
||||||
|
subpart = camel_multipart_get_part (mp, i);
|
||||||
|
|
||||||
|
write_hr (html, stream);
|
||||||
|
|
||||||
|
output = format_mime_part (subpart, md, html, stream);
|
||||||
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user