From 078beeeaae30503620d0c9266bb8fd9ce3e08f1f Mon Sep 17 00:00:00 2001
From: Daniel Friesel <derf@finalrewind.org>
Date: Fri, 9 Feb 2018 21:10:09 +0100
Subject: parse_options_from_string: only leave quote if start and end
 character match

Closes #381
---
 src/options.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

(limited to 'src')

diff --git a/src/options.c b/src/options.c
index 837d7a8..bf5c67c 100644
--- a/src/options.c
+++ b/src/options.c
@@ -214,7 +214,7 @@ static void feh_parse_options_from_string(char *opts)
 	char *s;
 	char *t;
 	char last = 0;
-	int inquote = 0;
+	char inquote = 0;
 	int i = 0;
 
 	/* So we don't reinvent the wheel (not again, anyway), we use the
@@ -229,7 +229,7 @@ static void feh_parse_options_from_string(char *opts)
 			eprintf(PACKAGE " does not support more than 64 words per "
 					"theme definition.\n Please shorten your lines.");
 
-		if ((*t == ' ') && !(inquote)) {
+		if ((*t == ' ') && !inquote) {
 			*t = '\0';
 			num++;
 
@@ -240,8 +240,10 @@ static void feh_parse_options_from_string(char *opts)
 
 			list[num - 1] = feh_string_normalize(s);
 			break;
-		} else if (((*t == '\"') || (*t == '\'')) && last != '\\')
-			inquote = !(inquote);
+		} else if ((*t == inquote) && (last != '\\')) {
+			inquote = 0;
+		} else if (((*t == '\"') || (*t == '\'')) && (last != '\\') && !inquote)
+			inquote = *t;
 		last = *t;
 	}
 
-- 
cgit v1.2.3