Hi, thank you for reporting this bug and for providing a patch to fix it. I just committed your patch.
Also thanks to tb@ and deraadt@ for cross-checking the patch. Yours, Ingo user wrote on Thu, Aug 05, 2021 at 12:43:21AM -0500: > Oops, forgot that OpenBSD doesn't have ! capability in less. Instead of !echo > a > % and !echo b > %, run > $ echo a > /tmp/test > Press h and q in less to reload the file > $ echo b > /tmp/test > Press h and q in less to reload the file > > On Thu, Aug 05, 2021 at 12:37:00AM -0500, user wrote: > > Bug Reproduction: > > $ touch /tmp/test > > $ less /tmp/test > > Press r > > Run !echo a > % > > Run !echo b > % > > Output: > > a > > b > > > > On Fri, Jul 23, 2021 at 11:15:59AM -0500, user wrote: > > > Less contains a hack to force files of size 0 to become non-seekable in > > > order to workaround a linux kernel bug. > > > > > > When the file becomes non-seekable any further reads from the file are > > > appended rather than overwriting the original contents of the file. > > > > > > diff --git ch.c ch.c > > > index 1a679767a42..d7c0aa34e90 100644 > > > --- ch.c > > > +++ ch.c > > > @@ -643,19 +643,6 @@ ch_flush(void) > > > ch_block = 0; /* ch_fpos / LBUFSIZE; */ > > > ch_offset = 0; /* ch_fpos % LBUFSIZE; */ > > > > > > -#if 1 > > > - /* > > > - * This is a kludge to workaround a Linux kernel bug: files in > > > - * /proc have a size of 0 according to fstat() but have readable > > > - * data. They are sometimes, but not always, seekable. > > > - * Force them to be non-seekable here. > > > - */ > > > - if (ch_fsize == 0) { > > > - ch_fsize = -1; > > > - ch_flags &= ~CH_CANSEEK; > > > - } > > > -#endif > > > - > > > if (lseek(ch_file, (off_t)0, SEEK_SET) == (off_t)-1) { > > > /* > > > * Warning only; even if the seek fails for some reason