commit 30faab0: [Fix] Fix issues with the raw header on header insertion/modification
Vsevolod Stakhov
vsevolod at rspamd.com
Mon Jul 29 17:49:18 UTC 2024
Author: Vsevolod Stakhov
Date: 2023-11-23 15:37:29 +0000
URL: https://github.com/rspamd/rspamd/commit/30faab04ebbd968910a33b52238df84b8be23776
[Fix] Fix issues with the raw header on header insertion/modification
---
src/libmime/mime_headers.c | 39 +++++++++++++++++++++++++++++++++------
1 file changed, 33 insertions(+), 6 deletions(-)
diff --git a/src/libmime/mime_headers.c b/src/libmime/mime_headers.c
index daba57f0d..e7b9c0c9b 100644
--- a/src/libmime/mime_headers.c
+++ b/src/libmime/mime_headers.c
@@ -1,11 +1,11 @@
-/*-
- * Copyright 2016 Vsevolod Stakhov
+/*
+ * Copyright 2023 Vsevolod Stakhov
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
- * http://www.apache.org/licenses/LICENSE-2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -1198,9 +1198,36 @@ void rspamd_message_set_modified_header(struct rspamd_task *task,
nhdr->name = hdr_elt->name;
nhdr->value = rspamd_mempool_alloc(task->task_pool,
raw_len + 1);
- nhdr->raw_len = rspamd_strlcpy(nhdr->value, raw_value,
- raw_len + 1);
- nhdr->raw_value = nhdr->value;
+ rspamd_strlcpy(nhdr->value, raw_value, raw_len + 1);
+ /* TODO: unfold header value, sigh */
+
+ /* Deal with the raw value */
+ size_t namelen = strlen(hdr_elt->name);
+ char *rawbuf = rspamd_mempool_alloc(task->task_pool, namelen +
+ raw_len +
+ sizeof(": \r\n"));
+ /* Name: value<newline> */
+ nhdr->raw_value = rawbuf;
+ memcpy(rawbuf, hdr_elt->name, namelen);
+ rawbuf += namelen;
+ memcpy(rawbuf, ": ", sizeof(": ") - 1);
+ nhdr->separator = rspamd_mempool_strdup(task->task_pool, " ");
+ rawbuf += sizeof(": ") - 1;
+ memcpy(rawbuf, raw_value, raw_len);
+
+ if (MESSAGE_FIELD(task, nlines_type) == RSPAMD_TASK_NEWLINES_LF) {
+ rawbuf[raw_len++] = '\n';
+ }
+ else {
+ rawbuf[raw_len++] = '\r';
+
+ if (MESSAGE_FIELD(task, nlines_type) == RSPAMD_TASK_NEWLINES_CRLF) {
+ rawbuf[raw_len++] = '\n';
+ }
+ }
+
+ rawbuf[raw_len] = '\0';
+ nhdr->raw_len = raw_len;
nhdr->decoded = rspamd_mime_header_decode(task->task_pool,
raw_value, raw_len, NULL);
More information about the Commits
mailing list