diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2009-04-12 13:54:13 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2009-04-12 13:54:13 +0000 |
commit | 67b5eeb93324f7484836be705698e72008498fe5 (patch) | |
tree | 146cb9dc174befb20d6a0d75f88bf3cef9cc82ee | |
parent | 32a385f5b0a74ca886e69472aaa1de8045a1ddbd (diff) | |
download | busybox-67b5eeb93324f7484836be705698e72008498fe5.tar.gz |
awk: fix long field separators case. By Ian Wienand (ianw AT vmware.com)
-rw-r--r-- | editors/awk.c | 5 | ||||
-rwxr-xr-x | testsuite/awk.tests | 6 |
2 files changed, 10 insertions, 1 deletions
diff --git a/editors/awk.c b/editors/awk.c index 9b15b3cd6..89ce2cfc8 100644 --- a/editors/awk.c +++ b/editors/awk.c @@ -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); diff --git a/testsuite/awk.tests b/testsuite/awk.tests index 8e72dd38f..0db99ab21 100755 --- a/testsuite/awk.tests +++ b/testsuite/awk.tests @@ -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" \ |