[tin-dev] [tin 2.6.4] snapshots

Urs Janßen urs at tin.org
Sun Dec 1 15:29:56 CET 2024


The following patch fixes a double-free /  NULL pointer dereference
for quote_chars used in attributes (1st part) and memleaks for
news_headers_to_display and news_headers_to_not_display used in attributes
(2nd part).

=== modified file 'src/attrib.c'
--- old/src/attrib.c	2024-11-25 19:56:05 +0000
+++ new/src/attrib.c	2024-12-01 14:06:21 +0000
@@ -471,6 +471,7 @@
 						quote_dash_to_space(buf);
 						*tmp = my_strdup(buf);
 						set_attrib(OPT_ATTRIB_QUOTE_CHARS, scope, line, *tmp);
+						*tmp = NULL;
 						found = TRUE;
 						break;
 					}
@@ -837,23 +838,33 @@
 				SET_BOOLEAN(mark_saved_read);
 
 			case OPT_ATTRIB_NEWS_HEADERS_TO_DISPLAY:
-				if (!curr_scope->attribute->news_headers_to_display)
-					curr_scope->attribute->news_headers_to_display = my_malloc(sizeof(char *));
-				else
-					FreeIfNeeded(*curr_scope->attribute->news_headers_to_display);
-				*curr_scope->attribute->news_headers_to_display = my_strdup((char *) data);
-				build_news_headers_array(curr_scope->attribute, TRUE);
-				curr_scope->state->news_headers_to_display = TRUE;
+				{
+					char *tmp = (char *) data;
+
+					if (!curr_scope->attribute->news_headers_to_display)
+						curr_scope->attribute->news_headers_to_display = my_malloc(sizeof(char *));
+					else
+						FreeIfNeeded(*curr_scope->attribute->news_headers_to_display);
+					*curr_scope->attribute->news_headers_to_display = my_strdup(tmp);
+					FreeAndNull(tmp);
+					build_news_headers_array(curr_scope->attribute, TRUE);
+					curr_scope->state->news_headers_to_display = TRUE;
+				}
 				break;
 
 			case OPT_ATTRIB_NEWS_HEADERS_TO_NOT_DISPLAY:
-				if (!curr_scope->attribute->news_headers_to_not_display)
-					curr_scope->attribute->news_headers_to_not_display = my_malloc(sizeof(char *));
-				else
-					FreeIfNeeded(*curr_scope->attribute->news_headers_to_not_display);
-				*curr_scope->attribute->news_headers_to_not_display = my_strdup((char *) data);
-				build_news_headers_array(curr_scope->attribute, FALSE);
-				curr_scope->state->news_headers_to_not_display = TRUE;
+				{
+					char *tmp = (char *) data;
+
+					if (!curr_scope->attribute->news_headers_to_not_display)
+						curr_scope->attribute->news_headers_to_not_display = my_malloc(sizeof(char *));
+					else
+						FreeIfNeeded(*curr_scope->attribute->news_headers_to_not_display);
+					*curr_scope->attribute->news_headers_to_not_display = my_strdup(tmp);
+					FreeAndNull(tmp);
+					build_news_headers_array(curr_scope->attribute, FALSE);
+					curr_scope->state->news_headers_to_not_display = TRUE;
+				}
 				break;
 
 			case OPT_ATTRIB_POS_FIRST_UNREAD:




More information about the tin-dev mailing list