summaryrefslogtreecommitdiff
path: root/mail/dbmail/files/patch-0031-boundaries-fixups-ordering-of-parts-do-not-add-newline-on-
diff options
context:
space:
mode:
Diffstat (limited to 'mail/dbmail/files/patch-0031-boundaries-fixups-ordering-of-parts-do-not-add-newline-on-')
-rw-r--r--mail/dbmail/files/patch-0031-boundaries-fixups-ordering-of-parts-do-not-add-newline-on-180
1 files changed, 180 insertions, 0 deletions
diff --git a/mail/dbmail/files/patch-0031-boundaries-fixups-ordering-of-parts-do-not-add-newline-on- b/mail/dbmail/files/patch-0031-boundaries-fixups-ordering-of-parts-do-not-add-newline-on-
new file mode 100644
index 000000000000..d2f2f6bf163b
--- /dev/null
+++ b/mail/dbmail/files/patch-0031-boundaries-fixups-ordering-of-parts-do-not-add-newline-on-
@@ -0,0 +1,180 @@
+From 3fd6782988f01c2f56af19012e470ea16e800f51 Mon Sep 17 00:00:00 2001
+From: Michele Comitini <michele.comitini@gmail.com>
+Date: Tue, 1 Nov 2016 21:20:16 +0100
+Subject: [PATCH 31/33] boundaries fixups: ordering of parts, do not add
+ newline on boundary if there's no part after previous header (#34)
+
+* Fix IMAP mailbox maintanence
+
+Update message's mailbox id in a separate explicit transaction to prevent
+SQLException: ORA-01453 error on the next db_begin_transaction() call
+(see db_mailbox_seq_update() next to 'UPDATE dbmail_messages SET mailbox_idnr'
+query).
+
+* add newline only if is_message
+
+* better fix for rfc822 multipart messages with boundary after header
+
+* fixed some race condition when closing boundaries, since key does not change. Needed ordering parts on depth DESC when key does not vary.
+
+* fixes ordering in insertion
+---
+ src/dm_message.c | 12 ++++---
+ test/check_dbmail.h | 78 ++++++++++++++++++++++++++++++++++++++++++++-
+ test/check_dbmail_message.c | 8 +++++
+ 3 files changed, 93 insertions(+), 5 deletions(-)
+
+diff --git src/dm_message.c src/dm_message.c
+index 9d30d52..784c091 100644
+--- src/dm_message.c
++++ src/dm_message.c
+@@ -387,7 +387,7 @@ static DbmailMessage * _mime_retrieve(DbmailMessage *self)
+ "FROM %smimeparts p "
+ "JOIN %spartlists l ON p.id = l.part_id "
+ "JOIN %sphysmessage ph ON ph.id = l.physmessage_id "
+- "WHERE l.physmessage_id = ? ORDER BY l.part_key,l.part_order ASC",
++ "WHERE l.physmessage_id = ? ORDER BY l.part_key, l.part_order ASC, l.part_depth DESC",
+ frag, p_string_str(n), DBPFX, DBPFX, DBPFX);
+ db_stmt_set_u64(stmt, 1, self->id);
+ r = db_stmt_query(stmt);
+@@ -454,10 +454,14 @@ static DbmailMessage * _mime_retrieve(DbmailMessage *self)
+ if ((depth > 0) && (blist[depth-1][0]))
+ strncpy(boundary, blist[depth-1], MAX_MIME_BLEN-1);
+
+- if (is_header && (!prev_header || prev_boundary || (prev_header && depth>0 && !prev_is_message))) {
++ if (is_header)
++ if (prev_header && depth>0 && !prev_is_message) {
++ dprint("--%s\n", boundary);
++ p_string_append_printf(m, "--%s\n", boundary);
++ } else if (!prev_header || prev_boundary) {
+ dprint("\n--%s\n", boundary);
+ p_string_append_printf(m, "\n--%s\n", boundary);
+- }
++ }
+
+ p_string_append_printf(m, "%s", str);
+ dprint("<part is_header=\"%d\" depth=\"%d\" key=\"%d\" order=\"%d\">\n%s\n</part>\n",
+@@ -558,7 +562,7 @@ static gboolean store_mime_multipart(GMimeObject *object, DbmailMessage *m, cons
+ if (boundary) {
+ n++;
+ m->part_depth--;
+- m->part_order=n;
++ m->part_order++;
+ }
+
+ if (g_mime_content_type_is_type(GMIME_CONTENT_TYPE(content_type), "multipart", "*") &&
+diff --git test/check_dbmail.h test/check_dbmail.h
+index 09c9958..439c8a1 100644
+--- test/check_dbmail.h
++++ test/check_dbmail.h
+@@ -1561,7 +1561,7 @@ char *multipart_message8 = "From: nobody@example.org\n"
+ "bmdzLnhtbFBLAQItABQABgAIAAAAIQDv0+Pp+gEAAPsDAAAQAAAAAAAAAAAAAAAAALREAABkb2NQ\n"
+ "cm9wcy9hcHAueG1sUEsFBgAAAAAPAA8A3AMAAORHAAAAAA==\n"
+ "\n"
+- "--_004_AAD42BB12C540843AB5C952ADD4D978901830A1Bswi52mbx1orfloc_--\";\n";
++ "--_004_AAD42BB12C540843AB5C952ADD4D978901830A1Bswi52mbx1orfloc_--\n";
+
+ char *multipart_message9 = "From: a\n"
+ "To: b\n"
+@@ -28440,3 +28440,79 @@ char *multipart_message_big = "From: \"Gennadiy Poryev\" <vecanoi@gmail.com>\n"
+ "/g8HAAAAAwANNP0/pQ4DAA80/T+lDvA8\n"
+ "\n"
+ "------=_NextPart_000_0000_01CDFBC6.932A1F00--\n";
++
++char *multipart_message_submessage = "Content-Type: multipart/mixed; boundary=\"===============9147350442359610775==\"\n"
++"MIME-Version: 1.0\n"
++"To: test@test.it\n"
++"From: test@test.it\n"
++"\n"
++"--===============9147350442359610775==\n"
++"Content-Type: message/rfc822\n"
++"MIME-Version: 1.0\n"
++"\n"
++"Content-Type: multipart/alternative;\n"
++" boundary=\"===============1150329730008994878==\"\n"
++"MIME-Version: 1.0\n"
++"Subject: Link\n"
++"From: my@email.com\n"
++"To: your@email.com\n"
++"\n"
++"--===============1150329730008994878==\n"
++"Content-Type: text/plain; charset=\"us-ascii\"\n"
++"MIME-Version: 1.0\n"
++"Content-Transfer-Encoding: 7bit\n"
++"\n"
++"Hi!\n"
++"How are you?\n"
++"Here is the link you wanted:\n"
++"https://www.python.org\n"
++"--===============1150329730008994878==\n"
++"Content-Type: text/html; charset=\"us-ascii\"\n"
++"MIME-Version: 1.0\n"
++"Content-Transfer-Encoding: 7bit\n"
++"\n"
++"<html>\n"
++" <head></head>\n"
++" <body>\n"
++" <p>Hi!<br>\n"
++" How are you?<br>\n"
++" Here is the <a href=\"https://www.python.org\">link</a> you wanted.\n"
++" </p>\n"
++" </body>\n"
++"</html>\n"
++"\n"
++"--===============1150329730008994878==\n"
++"Content-Type: multipart/mixed; boundary=\"===============0782181963306111896==\"\n"
++"MIME-Version: 1.0\n"
++"\n"
++"--===============0782181963306111896==\n"
++"Content-Type: text/plain; charset=\"us-ascii\"\n"
++"MIME-Version: 1.0\n"
++"Content-Transfer-Encoding: 7bit\n"
++"\n"
++"Text part3_1.\n"
++"--===============0782181963306111896==\n"
++"Content-Type: text/plain; charset=\"us-ascii\"\n"
++"MIME-Version: 1.0\n"
++"Content-Transfer-Encoding: 7bit\n"
++"\n"
++"Text part3_2.\n"
++"--===============0782181963306111896==--\n"
++"\n"
++"\n"
++"\n"
++"\n"
++"--===============1150329730008994878==--\n"
++"\n"
++"--===============9147350442359610775==\n"
++"Content-Type: text/plain; charset=\"us-ascii\"\n"
++"MIME-Version: 1.0\n"
++"Content-Transfer-Encoding: 7bit\n"
++"\n"
++"This is a simple text attachment.\n"
++"with some newlines at the end.\n"
++"\n"
++"\n"
++"\n"
++"--===============9147350442359610775==--\n"
++"\n";
+diff --git test/check_dbmail_message.c test/check_dbmail_message.c
+index e36a2ea..f070257 100644
+--- test/check_dbmail_message.c
++++ test/check_dbmail_message.c
+@@ -431,6 +431,14 @@ START_TEST(test_dbmail_message_store)
+ COMPARE(e,t);
+ g_free(e);
+ g_free(t);
++ //-----------------------------------------
++ m = message_init(multipart_message_submessage);
++ e = dbmail_message_to_string(m);
++ t = store_and_retrieve(m);
++ COMPARE(e,t);
++ COMPARE(multipart_message_submessage, t);
++ g_free(e);
++ g_free(t);
+ }
+ END_TEST
+
+--
+2.10.1 (Apple Git-78)
+