sfeed

RSS and Atom parser
git clone git://git.codemadness.org/sfeed
Log | Files | Refs | README | LICENSE

commit 45fba594ca26328ae1d7ba3b133983755af1d745
parent 30fbd4578cfec6d12549bd9f99a2b9677b5c668f
Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date:   Wed,  8 Apr 2026 20:14:03 +0200

sfeed_curses: fix: open /dev/null for reading and writing

It was opened just for writing. This is incorrect, because in forkexec() in
non-interactive mode (used for plumbing), a program could read from stdin:

	dup2(devnullfd, 0); /* stdin */

A read() in the program will return with errno = EBADF, because the descriptor
can only be written to (O_WRONLY).

Because stderr output was written to /dev/null also, this error was not visible
if a program would report a read error either.

To reproduce:

plumb.sh:

	#!/bin/sh
	# ignore $1
	cat

Run:
	SFEED_PLUMBER="./plumb.sh" strace -o strace.log -ff sfeed_curses < items.tsv

In the strace log for the plumbed program the read error is visible:

	read(0, 0xaddr, 131072)         = -1 EBADF (Bad file descriptor)

Diffstat:
Msfeed_curses.c | 2+-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sfeed_curses.c b/sfeed_curses.c @@ -2012,7 +2012,7 @@ main(int argc, char *argv[]) if (argc <= 1) feeds[0].fp = NULL; - if ((devnullfd = open("/dev/null", O_WRONLY)) == -1) + if ((devnullfd = open("/dev/null", O_RDWR)) == -1) die("open: /dev/null"); init();