util: allow unbalanced double quote in EXTRACT_QUOTES|EXTRACT_RELAX mode
authorEvgeny Vereshchagin <evvers@ya.ru>
Thu, 22 Oct 2015 00:37:32 +0000 (00:37 +0000)
committerEvgeny Vereshchagin <evvers@ya.ru>
Thu, 22 Oct 2015 00:37:32 +0000 (00:37 +0000)
extract_first_word understands "\'string" but doesn't understand "\"string"
fixed this inconsistency.

src/basic/util.c
src/test/test-util.c

index 3e90456..3989b41 100644 (file)
@@ -5913,9 +5913,11 @@ int extract_first_word(const char **p, char **ret, const char *separators, Extra
                         break;
 
                 case DOUBLE_QUOTE:
-                        if (c == 0)
+                        if (c == 0) {
+                                if (flags & EXTRACT_RELAX)
+                                        goto finish_force_terminate;
                                 return -EINVAL;
-                        else if (c == '\"')
+                        else if (c == '\"')
                                 state = VALUE;
                         else if (c == '\\')
                                 state = DOUBLE_QUOTE_ESCAPE;
index 503e840..b5d9d01 100644 (file)
@@ -1639,6 +1639,12 @@ static void test_extract_first_word(void) {
         free(t);
         assert_se(isempty(p));
 
+        p = original = "\"fooo";
+        assert_se(extract_first_word(&p, &t, NULL, EXTRACT_QUOTES|EXTRACT_RELAX) > 0);
+        assert_se(streq(t, "fooo"));
+        free(t);
+        assert_se(isempty(p));
+
         p = original = "yay\'foo\'bar";
         assert_se(extract_first_word(&p, &t, NULL, 0) > 0);
         assert_se(streq(t, "yay\'foo\'bar"));