diff -u evolution-data-server-2.21.92/debian/changelog evolution-data-server-2.21.92/debian/changelog --- evolution-data-server-2.21.92/debian/changelog +++ evolution-data-server-2.21.92/debian/changelog @@ -1,3 +1,9 @@ +evolution-data-server (2.21.92-0ubuntu2) hardy; urgency=low + + * Fix MIME header order (LP: 194642) + + -- Michael B. Trausch Sun, 02 Mar 2008 15:33:42 -0500 + evolution-data-server (2.21.92-0ubuntu1) hardy; urgency=low * New upstream version: only in patch2: unchanged: --- evolution-data-server-2.21.92.orig/debian/patches/35_fix-mime-header-ordering.patch +++ evolution-data-server-2.21.92/debian/patches/35_fix-mime-header-ordering.patch @@ -0,0 +1,208 @@ +diff -Nur evolution-data-server-2.21.92/camel/camel-mime-utils.h evolution-data-server-2.21.92.new/camel/camel-mime-utils.h +--- evolution-data-server-2.21.92/camel/camel-mime-utils.h 2008-03-02 16:35:24.000000000 -0500 ++++ evolution-data-server-2.21.92/camel/camel-mime-utils.h 2008-03-02 16:35:33.000000000 -0500 +@@ -134,6 +134,7 @@ + struct _camel_header_param *camel_header_param_list_decode (const char *in); + char *camel_header_param (struct _camel_header_param *params, const char *name); + struct _camel_header_param *camel_header_set_param (struct _camel_header_param **paramsp, const char *name, const char *value); ++void _camel_header_param_format_append (GString *out, struct _camel_header_param *p); /* added as helper for next func */ + void camel_header_param_list_format_append (GString *out, struct _camel_header_param *params); + char *camel_header_param_list_format (struct _camel_header_param *params); + void camel_header_param_list_free (struct _camel_header_param *params); +diff -Nur evolution-data-server-2.21.92/camel/camel-mime-utils.c evolution-data-server-2.21.92.new/camel/camel-mime-utils.c +--- evolution-data-server-2.21.92/camel/camel-mime-utils.c 2008-02-22 04:50:01.000000000 -0500 ++++ evolution-data-server-2.21.92.new/camel/camel-mime-utils.c 2008-03-01 23:53:34.000000000 -0500 +@@ -3333,104 +3333,121 @@ + } + + void +-camel_header_param_list_format_append (GString *out, struct _camel_header_param *p) ++_camel_header_param_format_append (GString *out, struct _camel_header_param *p) + { + int used = out->len; ++ gboolean encoded = FALSE; ++ gboolean quote = FALSE; ++ int here = out->len; ++ size_t nlen, vlen; ++ char *value; + +- while (p) { +- gboolean encoded = FALSE; +- gboolean quote = FALSE; +- int here = out->len; +- size_t nlen, vlen; +- char *value; +- +- if (!p->value) { +- p = p->next; +- continue; +- } + +- value = header_encode_param ((unsigned char *) p->value, &encoded); +- if (!value) { +- w(g_warning ("appending parameter %s=%s violates rfc2184", p->name, p->value)); +- value = g_strdup (p->value); +- } ++ if (!p->value) { ++ return; ++ } + +- if (!encoded) { +- char *ch; ++ value = header_encode_param ((unsigned char *) p->value, &encoded); ++ if (!value) { ++ w(g_warning ("appending parameter %s=%s violates rfc2184", p->name, p->value)); ++ value = g_strdup (p->value); ++ } + +- for (ch = value; *ch; ch++) { +- if (camel_mime_is_tspecial (*ch) || camel_mime_is_lwsp (*ch)) +- break; +- } ++ if (!encoded) { ++ char *ch; + +- quote = ch && *ch; ++ for (ch = value; *ch; ch++) { ++ if (camel_mime_is_tspecial (*ch) || camel_mime_is_lwsp (*ch)) ++ break; + } + +- nlen = strlen (p->name); +- vlen = strlen (value); ++ quote = ch && *ch; ++ } + +- if (used + nlen + vlen > CAMEL_FOLD_SIZE - 8) { +- out = g_string_append (out, ";\n\t"); +- here = out->len; +- used = 0; +- } else +- out = g_string_append (out, "; "); +- +- if (nlen + vlen > CAMEL_FOLD_SIZE - 8) { +- /* we need to do special rfc2184 parameter wrapping */ +- int maxlen = CAMEL_FOLD_SIZE - (nlen + 8); +- char *inptr, *inend; +- int i = 0; +- +- inptr = value; +- inend = value + vlen; +- +- while (inptr < inend) { +- char *ptr = inptr + MIN (inend - inptr, maxlen); +- +- if (encoded && ptr < inend) { +- /* be careful not to break an encoded char (ie %20) */ +- char *q = ptr; +- int j = 2; +- +- for ( ; j > 0 && q > inptr && *q != '%'; j--, q--); +- if (*q == '%') +- ptr = q; +- } ++ nlen = strlen (p->name); ++ vlen = strlen (value); + +- if (i != 0) { +- g_string_append (out, ";\n\t"); +- here = out->len; +- used = 0; +- } ++ if (used + nlen + vlen > CAMEL_FOLD_SIZE - 8) { ++ out = g_string_append (out, ";\n\t"); ++ here = out->len; ++ used = 0; ++ } else { ++ out = g_string_append (out, "; "); ++ } ++ ++ if (nlen + vlen > CAMEL_FOLD_SIZE - 8) { ++ /* we need to do special rfc2184 parameter wrapping */ ++ int maxlen = CAMEL_FOLD_SIZE - (nlen + 8); ++ char *inptr, *inend; ++ int i = 0; + +- g_string_append_printf (out, "%s*%d%s=", p->name, i++, encoded ? "*" : ""); +- if (encoded || !quote) +- g_string_append_len (out, inptr, ptr - inptr); +- else +- quote_word (out, TRUE, inptr, ptr - inptr); ++ inptr = value; ++ inend = value + vlen; + +- d(printf ("wrote: %s\n", out->str + here)); ++ while (inptr < inend) { ++ char *ptr = inptr + MIN (inend - inptr, maxlen); + +- used += (out->len - here); ++ if (encoded && ptr < inend) { ++ /* be careful not to break an encoded char (ie %20) */ ++ char *q = ptr; ++ int j = 2; + +- inptr = ptr; ++ for ( ; j > 0 && q > inptr && *q != '%'; j--, q--); ++ if (*q == '%') ++ ptr = q; + } +- } else { +- g_string_append_printf (out, "%s%s=", p->name, encoded ? "*" : ""); + ++ if (i != 0) { ++ g_string_append (out, ";\n\t"); ++ here = out->len; ++ used = 0; ++ } ++ ++ g_string_append_printf (out, "%s*%d%s=", p->name, i++, encoded ? "*" : ""); + if (encoded || !quote) +- g_string_append (out, value); ++ g_string_append_len (out, inptr, ptr - inptr); + else +- quote_word (out, TRUE, value, vlen); ++ quote_word (out, TRUE, inptr, ptr - inptr); ++ ++ d(printf ("wrote: %s\n", out->str + here)); + + used += (out->len - here); ++ ++ inptr = ptr; + } ++ } else { ++ g_string_append_printf (out, "%s%s=", p->name, encoded ? "*" : ""); ++ ++ if (encoded || !quote) ++ g_string_append (out, value); ++ else ++ quote_word (out, TRUE, value, vlen); + +- g_free (value); ++ used += (out->len - here); ++ } ++ ++ g_free (value); ++ return; ++} ++ ++void ++camel_header_param_list_format_append (GString *out, struct _camel_header_param *p) ++{ ++ struct _camel_header_param *name_param = NULL; ++ ++ while (p) { ++ if (strcmp (p->name, "name")) { ++ _camel_header_param_format_append (out, p); ++ } else { ++ name_param = p; ++ } + + p = p->next; + } ++ ++ if (name_param) { ++ _camel_header_param_format_append (out, name_param); ++ } + } + + char *