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.
