bug-gnu-utils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: FIELDWIDTHS broken in awk 3.1.5


From: Aharon Robbins
Subject: Re: FIELDWIDTHS broken in awk 3.1.5
Date: Fri, 28 Oct 2005 07:09:49 +0200

Greetings.  It happpens that I fixed this bug earlier this month; I may
not have posted a fix to the list though.  In any case, the patch is below.

Thanks,

Arnold

> Date: Thu, 27 Oct 2005 16:59:39 +1000
> From: Ross Cartlidge <address@hidden>
> Subject: FIELDWIDTHS broken in awk 3.1.5
> To: address@hidden
>
> Test with attached script:-
>
> $ awk -W version | head -n 2
> GNU Awk 3.1.3
> Copyright (C) 1989, 1991-2003 Free Software Foundation.
> $ ./fieldwidths_bug.awk
> one two three
> 11 2222 33
> $
>
> $ awk -W version | head -n 2
> GNU Awk 3.1.5
> Copyright (C) 1989, 1991-2005 Free Software Foundation.
> $ ./fieldwidths_bug.awk
> one two three
> 11 2222
> $
>
> rossc
>
> Ross Cartlidge[rcartlid] address@hidden Cisco Systems
> AS Engineer Asia Pacific, 201 Pacific Highway, St. Leonards, NSW, Australia
> +61 2 8446 6556(work) +61 401 890 488(mobile)

Fri Oct  7 13:23:29 2005  Arnold D. Robbins  <address@hidden>

        * field.c (set_FIELDWIDTHS): Fix off-by-one error in assignment
        of sentinel value at end of FIELDWIDTHS array.

--- ../gawk-3.1.5/field.c       2005-05-11 18:28:15.000000000 +0300
+++ field.c     2005-10-07 12:22:05.000000000 +0200
@@ -916,7 +916,7 @@
 
        parse_field = fw_parse_field;
        scan = force_string(FIELDWIDTHS_node->var_value)->stptr;
-       end = scan + 1;
+
        if (FIELDWIDTHS == NULL)
                emalloc(FIELDWIDTHS, int *, fw_alloc * sizeof(int), 
"set_FIELDWIDTHS");
        FIELDWIDTHS[0] = 0;
@@ -941,7 +941,7 @@
                errno = 0;
                tmp = strtoul(scan, &end, 10);
                if (errno != 0
-                   || !(*end == '\0' || is_blank(*end))
+                   || (*end != '\0' && ! is_blank(*end))
                    || !(0 < tmp && tmp <= INT_MAX))
                        fatal(_("invalid FIELDWIDTHS value, near `%s'"),
                              scan);
@@ -954,7 +954,7 @@
                if (*scan == '\0')
                        break;
        }
-       FIELDWIDTHS[i] = -1;
+       FIELDWIDTHS[i+1] = -1;
 
        update_PROCINFO("FS", "FIELDWIDTHS");
 }




reply via email to

[Prev in Thread] Current Thread [Next in Thread]