commit 907cc2e: [Minor] Fix more issues in libmime

Vsevolod Stakhov vsevolod at highsecure.ru
Sat Sep 18 12:00:06 UTC 2021


Author: Vsevolod Stakhov
Date: 2021-09-18 12:56:46 +0100
URL: https://github.com/rspamd/rspamd/commit/907cc2eb616124abe41e7c1b525139a54f3cea8f (HEAD -> master)

[Minor] Fix more issues in libmime
Found by: coverity scan

---
 src/libmime/archives.c      |  6 ++++--
 src/libmime/mime_encoding.c |  8 ++++----
 src/libmime/mime_parser.c   | 12 ++++++++----
 3 files changed, 16 insertions(+), 10 deletions(-)

diff --git a/src/libmime/archives.c b/src/libmime/archives.c
index 1101213d1..467f9c021 100644
--- a/src/libmime/archives.c
+++ b/src/libmime/archives.c
@@ -141,7 +141,7 @@ rspamd_archive_process_zip (struct rspamd_task *task,
 	guint32 cd_offset, cd_size, comp_size, uncomp_size, processed = 0;
 	guint16 extra_len, fname_len, comment_len;
 	struct rspamd_archive *arch;
-	struct rspamd_archive_file *f;
+	struct rspamd_archive_file *f = NULL;
 
 	/* Zip files have interesting data at the end of archive */
 	p = part->parsed_data.begin + part->parsed_data.len - 1;
@@ -1263,6 +1263,7 @@ rspamd_7zip_read_substreams_info (struct rspamd_task *task,
 	}
 
 	folder_nstreams = g_alloca (sizeof (guint64) * num_folders);
+	memset (folder_nstreams, 0, sizeof (guint64) * num_folders);
 
 	while (p != NULL && p < end) {
 		/*
@@ -1410,9 +1411,10 @@ rspamd_7zip_read_archive_props (struct rspamd_task *task,
 	 */
 
 	proptype = *p;
-	SZ_SKIP_BYTES(1);
 
 	if (p != NULL) {
+		SZ_SKIP_BYTES(1);
+
 		while (proptype != 0) {
 			SZ_READ_VINT(proplen);
 
diff --git a/src/libmime/mime_encoding.c b/src/libmime/mime_encoding.c
index edbee1a30..a3467fc91 100644
--- a/src/libmime/mime_encoding.c
+++ b/src/libmime/mime_encoding.c
@@ -638,14 +638,14 @@ rspamd_mime_charset_find_by_content_maybe_split (const gchar *in, gsize inlen)
 				RSPAMD_CHARSET_MAX_CONTENT, false);
 
 		/* 7bit stuff */
-		if (strcmp (c1, "US-ASCII") == 0) {
+		if (c1 && strcmp (c1, "US-ASCII") == 0) {
 			c1 = NULL; /* Invalid - we have 8 bit there */
 		}
-		if (strcmp (c2, "US-ASCII") == 0) {
+		if (c2 && strcmp (c2, "US-ASCII") == 0) {
 			c2 = NULL; /* Invalid - we have 8 bit there */
 		}
-		if (strcmp (c3, "US-ASCII") == 0) {
-			c2 = NULL; /* Invalid - we have 8 bit there */
+		if (c3 && strcmp (c3, "US-ASCII") == 0) {
+			c3 = NULL; /* Invalid - we have 8 bit there */
 		}
 
 		if (!c1) {
diff --git a/src/libmime/mime_parser.c b/src/libmime/mime_parser.c
index 0363d4514..6ec28e057 100644
--- a/src/libmime/mime_parser.c
+++ b/src/libmime/mime_parser.c
@@ -596,14 +596,14 @@ rspamd_mime_parse_normal_part (struct rspamd_task *task,
 	g_assert (part != NULL);
 
 	rspamd_mime_part_get_cte (task, part->raw_headers, part,
-			!(part->ct->flags & RSPAMD_CONTENT_TYPE_MESSAGE));
+			part->ct && !(part->ct->flags & RSPAMD_CONTENT_TYPE_MESSAGE));
 	rspamd_mime_part_get_cd (task, part);
 
 	switch (part->cte) {
 	case RSPAMD_CTE_7BIT:
 	case RSPAMD_CTE_8BIT:
 	case RSPAMD_CTE_UNKNOWN:
-		if (part->ct->flags & RSPAMD_CONTENT_TYPE_MISSING) {
+		if (part->ct && (part->ct->flags & RSPAMD_CONTENT_TYPE_MISSING)) {
 			if (part->cte != RSPAMD_CTE_7BIT) {
 				/* We have something that has a missing content-type,
 				 * but it has non-7bit characters.
@@ -658,7 +658,9 @@ rspamd_mime_parse_normal_part (struct rspamd_task *task,
 		}
 		else {
 			msg_err_task ("invalid quoted-printable encoded part, assume 8bit");
-			part->ct->flags |= RSPAMD_CONTENT_TYPE_BROKEN;
+			if (part->ct) {
+				part->ct->flags |= RSPAMD_CONTENT_TYPE_BROKEN;
+			}
 			part->cte = RSPAMD_CTE_8BIT;
 			memcpy (parsed->str, part->raw_data.begin, part->raw_data.len);
 			parsed->len = part->raw_data.len;
@@ -694,7 +696,9 @@ rspamd_mime_parse_normal_part (struct rspamd_task *task,
 		}
 		else {
 			msg_err_task ("invalid uuencoding in encoded part, assume 8bit");
-			part->ct->flags |= RSPAMD_CONTENT_TYPE_BROKEN;
+			if (part->ct) {
+				part->ct->flags |= RSPAMD_CONTENT_TYPE_BROKEN;
+			}
 			part->cte = RSPAMD_CTE_8BIT;
 			parsed->len = MIN (part->raw_data.len, parsed->allocated);
 			memcpy (parsed->str, part->raw_data.begin, parsed->len);


More information about the Commits mailing list