commit f001e86: [Minor] Try to get filename from CT if CD header is broken

Vsevolod Stakhov vsevolod at highsecure.ru
Mon Dec 9 15:07:07 UTC 2019


Author: Vsevolod Stakhov
Date: 2019-12-09 15:03:42 +0000
URL: https://github.com/rspamd/rspamd/commit/f001e86f0b8618ca47d11edf5508a6cc4b34976c (HEAD -> master)

[Minor] Try to get filename from CT if CD header is broken

---
 src/libmime/mime_parser.c | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/src/libmime/mime_parser.c b/src/libmime/mime_parser.c
index 7b38b80b1..18c54d13b 100644
--- a/src/libmime/mime_parser.c
+++ b/src/libmime/mime_parser.c
@@ -448,6 +448,30 @@ rspamd_mime_part_get_cd (struct rspamd_task *task, struct rspamd_mime_part *part
 						cd->lc_data, &cd->filename);
 				break;
 			}
+			else if (part->ct) {
+				/*
+				 * Even in case of malformed Content-Disposition, we can still
+				 * fall back to Content-Type
+				 */
+				cd = rspamd_mempool_alloc0 (task->task_pool, sizeof (*cd));
+				cd->type = RSPAMD_CT_INLINE;
+
+				/* We can also have content dispositon definitions in Content-Type */
+				if (part->ct->attrs) {
+					RSPAMD_FTOK_ASSIGN (&srch, "name");
+					found = g_hash_table_lookup (part->ct->attrs, &srch);
+
+					if (!found) {
+						RSPAMD_FTOK_ASSIGN (&srch, "filename");
+						found = g_hash_table_lookup (part->ct->attrs, &srch);
+					}
+
+					if (found) {
+						cd->type = RSPAMD_CT_ATTACHMENT;
+						memcpy (&cd->filename, &found->value, sizeof (cd->filename));
+					}
+				}
+			}
 		}
 	}
 


More information about the Commits mailing list