On Sun, Oct 24, 2021 at 03:35:49PM -0500, Tim Chase wrote:
> On 2021-10-24 15:05, Edgar Pettijohn wrote:
> > On 10/24/21 10:11 AM, Klemens Nanni wrote:
> >> I fat fingered commands and it crashed.  Here is a reproducer
> >> (files do not have to exist):
> >>
> >>    $ vi foo
> >>    :e
> >>    :e bar
> >>    :q!
> >>    vi(12918) in free(): write after free 0xea559a2d980
> >>                                                       Abort
> >> trap (core dumped)
> >>
> >> In words:  open a file, open an empty file, open another file,
> >> exit forcefully.
> >
> > If it helps to narrow this down I can't reproduce on 6.9
> 
> FWIW, I reproduced the segfault on 6.9 on amd64
>   
>   $ uname -a
>    OpenBSD inspiron1420.attlocal.net 6.9 GENERIC.MP#4 amd64
>   $ rm -f foo 2>/dev/null # make sure it doesn't exist (see below)
>   $ vi foo
>   :e
>   :e bar
>   :q!
>   vi(61942) in free(): write after free 0x12513f7fe40
>                                                    Abort trap (core
>                                                    dumped) 
> and 7.0 on i386
> 
>   $ uname -a
>   OpenBSD mini10o.attlocal.net 7.0 GENERIC.MP#210 i386
> 
> In each case, it required that the first file *not* exist.  If I
> issued a
> 
>   $ touch foo
>   $ vi foo
>   :e
>   :e bar
>   :q!
> 
> it exited cleanly in both 6.9 & 7.0
> 
> I'm not sure how things are getting in a weird state, but when I
> issue the ":e bar" from a "foo" that exists, I get no warning. But
> when I issue the ":e bar" from a "foo" that doesn't exist, vi gives
> me a warning I wouldn't have otherwise expected:
> 
>   File is a temporary; exit will discard modifications.
> 
> which might have something to do with odd segfaulting state that
> results later.

Thank you for providing additional information.

Reply via email to