On Sat, Nov 12 2022, Jeremie Courreges-Anglas <j...@wxcvbn.org> wrote: > On Thu, Nov 10 2022, Mikhail <mp39...@gmail.com> wrote: >> On Thu, Nov 10, 2022 at 06:21:52PM +0100, Jeremie Courreges-Anglas wrote: >>> On Thu, Nov 10 2022, Mikhail <mp39...@gmail.com> wrote: >>> > On Thu, Nov 10, 2022 at 09:35:18AM +0100, Jeremie Courreges-Anglas wrote: >>> >> On Thu, Nov 10 2022, Ross L Richardson <open...@rlr.id.au> wrote: >>> >> > Reported upstream (by me) as >>> >> > https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=267684 >>> >> > >>> >> > math/ministat has a silly bug in which the code assumes that "-" will >>> >> > be >>> >> > specified no more than once at invocation: >>> >> > >>> >> > $ jot 3 | ministat - - >>> >> > Segmentation fault (core dumped) >>> >> > >>> >> > The problem is in the port-patched code at: >>> >> > 643 if (argc > (MAX_DS - 1)) >>> >> > 644 usage("Too many datasets."); >>> >> > 645 nds = argc; >>> >> > 646 for (i = 0; i < nds; i++) { >>> >> > 647 setfilenames[i] = argv[i]; >>> >> > 648 if (!strcmp(argv[i], "-")) >>> >> > 649 setfiles[0] = stdin; >>> >> > 650 else >>> >> > 651 setfiles[i] = fopen(argv[i], >>> >> > "r"); >>> >> > 652 if (setfiles[i] == NULL) >>> >> > 653 err(2, "Cannot open %s", >>> >> > argv[i]); >>> >> > 654 } >>> >> > >>> >> > On line 649, the index is fixed at 0, eventually leading to fgets() >>> >> > attempting to read from an uninitialised stream. >>> >> > >>> >> > The simplest fix is change the index: >>> >> > 649 setfiles[i] = stdin; >>> >> >>> >> Indeed. >>> >> >>> >> > That way, ministat will error out complaining that, on the second >>> >> > reading, >>> >> > stdin has fewer than 3 data points. >>> >> > (A more logical fix would be to check explicitly for more than 1 >>> >> > occurrence of "-".) >>> >> >>> >> A lot of tools that can use stdin don't explicitely check for it being >>> >> specified twice. As far as this port is concerned, I think it's fine. >>> >> >>> >> Thanks for your report. Do you want to take it to upstream FreeBSD? >>> >> >>> >> Here's the diff for our ports tree. >>> > >>> > FreeBSD version doesn't crash: >>> > >>> > [freefall ~] ministat - - >>> > ministat: Cannot open -: No error: 0 >>> > >>> > It's because on line 652 (see code snippet above) we check if array >>> > element is set to NULL, and before that we either use 0 index for stdin >>> > or don't set any element if we see any more -), so, I'd suggest to fail >>> > the same way as FreeBSD does, for this we need to explicitly set all >>> > array elements to NULL. >>> > >>> > So, how about such approach? >>> >>> Setting the array to NULL prevents the crash - FreeBSD sems to be more >>> forgiving here - but IMO the intended semantics are really to set >>> setfiles[i]. I think that the proposal from Ross should be preferred, >>> for the ports tree but also for an upstream fix. >> >> I created differential revision for Ross' patch: >> https://reviews.freebsd.org/D37346 > > Thanks! > >> If it won't be handled by FreeBSD in reasonable time, I think we can >> proceed with your patch without upstream then. > > I see it has already received positive feedback. I suggest we wait > until it gets committed, or at most one week.
Committed, thanks. -- jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF DDCC 0DFA 74AE 1524 E7EE