awk: fix long field separators case. By Ian Wienand (ianw AT vmware.com)
authorDenis Vlasenko <vda.linux@googlemail.com>
Sun, 12 Apr 2009 13:54:13 +0000 (13:54 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Sun, 12 Apr 2009 13:54:13 +0000 (13:54 -0000)
editors/awk.c
testsuite/awk.tests

index 9b15b3c..89ce2cf 100644 (file)
@@ -1574,7 +1574,10 @@ static int awk_split(const char *s, node *spl, char **slist)
                                if (s[l]) pmatch[0].rm_eo++;
                        }
                        memcpy(s1, s, l);
-                       s1[l] = '\0';
+                       /* make sure we remove *all* of the separator chars */
+                       while (l < pmatch[0].rm_eo) {
+                               s1[l++] = '\0';
+                       }
                        nextword(&s1);
                        s += pmatch[0].rm_eo;
                } while (*s);
index 8e72dd3..0db99ab 100755 (executable)
@@ -22,6 +22,12 @@ testing "awk hex const 1" "awk '{ print or(0xffffffff,1) }'" "4.29497e+09\n" ""
 testing "awk hex const 2" "awk '{ print or(0x80000000,1) }'" "2.14748e+09\n" "" "\n"
 testing "awk oct const"   "awk '{ print or(01234,1) }'"      "669\n"         "" "\n"
 
+# long field seps requiring regex
+testing "awk long field sep" "awk -F-- '{ print NF, length(\$NF), \$NF }'" \
+       "2 0 \n3 0 \n4 0 \n5 0 \n" \
+       "" \
+       "a--\na--b--\na--b--c--\na--b--c--d--"
+
 # '@(samp|code|file)\{' is an invalid extended regex (unmatched '{'),
 # but gawk 3.1.5 does not bail out on it.
 testing "awk gsub falls back to non-extended-regex" \