NetBSD-Bugs archive

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

Re: bin/59903: rs dumps core on valid input



This patch works for me (I had some additional test cases I didn't put in the pr; they pass now).

To my eyes:

1) Gosh, there are precious few comments in there

2) Definitely some questionable code style choices for 2026 C

Thanks for the quick turn-around.

-Mike


On Sat, Jan 10, 2026 at 1:45 AM RVP via gnats <gnats-admin%netbsd.org@localhost> wrote:
The following reply was made to PR bin/59903; it has been noted by GNATS.

From: RVP <rvp%SDF.ORG@localhost>
To: gnats-bugs%netbsd.org@localhost
Cc:
Subject: Re: bin/59903: rs dumps core on valid input
Date: Sat, 10 Jan 2026 07:18:36 +0000 (UTC)

 On Sat, 10 Jan 2026, mac%culver.net@localhost via gnats wrote:

 > $ cat 2x10
 > 43   27   8    22   12   78   18   43   41   13
 > 76   29   85   100  34   78   45   80   24   50
 >
 > $ rs -tz < 2x10
 > zsh: segmentation fault  rs -tz < 2x10
 > [...]
 > test files generated by playing around with this:
 >
 > $ cd /tmp
 > $ jot -r 100 | rs 10 10 | tee 10x10 | rs -T > T10x10
 > [...]
 >

 These also fail:

 ```
 $ jot 100 | rs -tz             # calculated orows * ocols > nelem
 $ jot 99 | rs -tz 10 10                # dim > nelem
 ```

 Looks like it's walking off the end of the `elem' array. Can you try:

 ---START patch---
 diff -urN a/src/usr.bin/rs/rs.c b/src/usr.bin/rs/rs.c
 --- a/src/usr.bin/rs/rs.c      2023-08-10 20:36:29.000000000 +0000
 +++ b/src/usr.bin/rs/rs.c      2026-01-10 06:28:57.921214613 +0000
 @@ -295,9 +295,12 @@
        if (flags & SQUEEZE) {
                if (flags & TRANSPOSE)
                        for (ep = elem, i = 0; i < ocols; i++) {
 -                              for (j = 0; j < orows; j++)
 +                              for (j = 0; j < orows; j++) {
 +                                      if (ep >= elem + nelem)
 +                                              break;
                                        if ((n = strlen(*ep++)) > max)
                                                max = n;
 +                              }
                                colwidths[i] = max + gutter;
                        }
                else
 ---END patch---

 -RVP



Home | Main Index | Thread Index | Old Index