diff options
author | raffitz <raf.a.m.c.gon@gmail.com> | 2019-01-14 14:09:47 +0000 |
---|---|---|
committer | Justin M. Keyes <justinkz@gmail.com> | 2019-01-15 00:49:11 +0100 |
commit | aaa8c3d7112ab29de8b6c61b68bdee254cc0a1e6 (patch) | |
tree | 626b92d4fede357f246e2d668380888be1aa2852 /src/nvim/memline.c | |
parent | 7b7266430c154931cb964ad2fb8f811140d28790 (diff) | |
download | rneovim-aaa8c3d7112ab29de8b6c61b68bdee254cc0a1e6.tar.gz rneovim-aaa8c3d7112ab29de8b6c61b68bdee254cc0a1e6.tar.bz2 rneovim-aaa8c3d7112ab29de8b6c61b68bdee254cc0a1e6.zip |
:recover : Fix crash on non-existent *.swp #9504
Reverts d2944e6a298e. mf_open() _can_ fail if the file does not exist.
closes #9503
closes #9504
Diffstat (limited to 'src/nvim/memline.c')
-rw-r--r-- | src/nvim/memline.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/nvim/memline.c b/src/nvim/memline.c index 95f3b0c623..4c4f7d65bd 100644 --- a/src/nvim/memline.c +++ b/src/nvim/memline.c @@ -277,6 +277,9 @@ int ml_open(buf_T *buf) // Open the memfile. No swap file is created yet. memfile_T *mfp = mf_open(NULL, 0); + if (mfp == NULL) { + goto error; + } buf->b_ml.ml_mfp = mfp; buf->b_ml.ml_flags = ML_EMPTY; @@ -360,10 +363,12 @@ int ml_open(buf_T *buf) return OK; error: - if (hp) { - mf_put(mfp, hp, false, false); + if (mfp != NULL) { + if (hp) { + mf_put(mfp, hp, false, false); + } + mf_close(mfp, true); // will also xfree(mfp->mf_fname) } - mf_close(mfp, true); // will also xfree(mfp->mf_fname) buf->b_ml.ml_mfp = NULL; return FAIL; } @@ -839,7 +844,7 @@ void ml_recover(void) mf_open() will consume "fname_used"! */ mfp = mf_open(fname_used, O_RDONLY); fname_used = p; - if (mfp->mf_fd < 0) { + if (mfp == NULL || mfp->mf_fd < 0) { EMSG2(_("E306: Cannot open %s"), fname_used); goto theend; } |