Page MenuHomeFreeBSD

stdin handling for ministat
Needs ReviewPublic

Authored by on Nov 10 2022, 5:25 PM.
Referenced Files
Unknown Object (File)
Mon, Jul 1, 12:56 PM
Unknown Object (File)
Sun, Jun 16, 8:22 PM
Unknown Object (File)
May 24 2024, 2:33 PM
Unknown Object (File)
May 16 2024, 8:19 AM
Unknown Object (File)
Apr 18 2024, 9:37 AM
Unknown Object (File)
Apr 18 2024, 9:37 AM
Unknown Object (File)
Apr 18 2024, 9:09 AM
Unknown Object (File)
Apr 10 2024, 2:04 AM



Currently ministat doesn't handle such use case:

[freefall ~w/freebsd/usr.bin/ministat (main)] ./ministat iguana - < chameleon
ministat: Cannot open -: No error: 0

Also, while porting to OpenBSD it was noted that handling of 'ministat - -' is also broken:

643                 for (i = 0; i < nds; i++) {
644                         setfilenames[i] = argv[i];
645                         if (!strcmp(argv[i], "-"))
646                                 setfiles[0] = stdin;
647                         else
648                                 setfiles[i] = fopen(argv[i], "r");
649                         if (setfiles[i] == NULL)
650                                 err(2, "Cannot open %s", argv[i]);
651                 }

on line 645 we check for '-' and if it matches we set setfiles[0] to stdin, in case of 'ministat - -' we don't set new element, and check setfiles[1] for NULL, and fail, on OpenBSD it leads to a crash, since array is un-initialized.

Proposed patch fixes these two cases. Author is Ross L Richardson <>.

Diff Detail

rG FreeBSD src repository
Lint Skipped
Tests Skipped

Event Timeline


The patch does the right thing. However, there is still a discrepancy how ministat(1) works with stdin. With the patch:

$ ministat - - <q
Dataset - must contain at least 3 data points

The reason is rather obvious -- it cannot rewind stdin to the initial position.

I agree though that this is a different issue and probably should be addressed separately.