From 67b5eeb93324f7484836be705698e72008498fe5 Mon Sep 17 00:00:00 2001 From: Denis Vlasenko Date: Sun, 12 Apr 2009 13:54:13 +0000 Subject: awk: fix long field separators case. By Ian Wienand (ianw AT vmware.com) --- editors/awk.c | 5 ++++- testsuite/awk.tests | 6 ++++++ 2 files changed, 10 insertions(+), 1 deletion(-) 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" \ -- cgit v1.2.3