awk: fix long field separators case. By Ian Wienand (ianw AT vmware.com)
No binary (build failed)
—
(log yok)
| @@ -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); | |
| @@ -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" \ | |