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

Reply via email to