Blob Blame History Raw
diff --git a/config.c b/config.c
index 346fed8..674964b 100644
--- a/config.c
+++ b/config.c
@@ -327,6 +327,7 @@ void bti_parse_configfile(struct session *session)
 	char *line = NULL;
 	char *key = NULL;
 	char *value = NULL;
+	char *hashmarker;
 	size_t len = 0;
 	ssize_t n;
 	char *c;
@@ -344,8 +345,28 @@ void bti_parse_configfile(struct session *session)
 		if (line[n - 1] == '\n')
 			line[n - 1] = '\0';
 
-		/* '#' is comment markers, like bash style */
-		*strchrnul(line, '#') = '\0';
+		/*
+		 * '#' is comment markers, like bash style but it is a valid
+		 * character in some fields, so only treat it as a comment
+		 * marker if it occurs at the beginning of the line, or after
+		 * whitespace
+		 */
+		hashmarker = strchrnul(line, '#');
+		if (line == hashmarker)
+			line[0] = '\0';
+		else {
+			while (hashmarker[0] != '\0') {
+				--hashmarker;
+				if (isblank(hashmarker[0]))
+					hashmarker[0] = '\0';
+				else {
+					/* false positive; '#' occured
+ 					 * within a string
+ 					 */
+					hashmarker = strchrnul(hashmarker+2, '#');
+				}
+			}
+		}
 		c = line;
 		while (isspace(*c))
 			c++;