Mercurial > vim
changeset 11506:7140ff4857eb v8.0.0636
patch 8.0.0636: when reading the undo file fails may use uninitialized data
commit https://github.com/vim/vim/commit/56f2db562ddc6c69026d55360f0cfaacd8adc26a
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Jun 11 23:09:15 2017 +0200
patch 8.0.0636: when reading the undo file fails may use uninitialized data
Problem: When reading the undo file fails may use uninitialized data.
Solution: Always clear the buffer on failure.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sun, 11 Jun 2017 23:15:03 +0200 |
parents | 50d0acf50b18 |
children | 00082879b93d |
files | src/undo.c src/version.c |
diffstat | 2 files changed, 14 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/src/undo.c +++ b/src/undo.c @@ -1063,6 +1063,8 @@ undo_read_time(bufinfo_T *bi) static int undo_read(bufinfo_T *bi, char_u *buffer, size_t size) { + int retval = OK; + #ifdef FEAT_CRYPT if (bi->bi_buffer != NULL) { @@ -1078,10 +1080,8 @@ undo_read(bufinfo_T *bi, char_u *buffer, n = fread(bi->bi_buffer, 1, (size_t)CRYPT_BUF_SIZE, bi->bi_fp); if (n == 0) { - /* Error may be checked for only later. Fill with zeros, - * so that the reader won't use garbage. */ - vim_memset(p, 0, size_todo); - return FAIL; + retval = FAIL; + break; } bi->bi_avail = n; bi->bi_used = 0; @@ -1095,12 +1095,17 @@ undo_read(bufinfo_T *bi, char_u *buffer, size_todo -= (int)n; p += n; } - return OK; } + else #endif if (fread(buffer, (size_t)size, 1, bi->bi_fp) != 1) - return FAIL; - return OK; + retval = FAIL; + + if (retval == FAIL) + /* Error may be checked for only later. Fill with zeros, + * so that the reader won't use garbage. */ + vim_memset(buffer, 0, size); + return retval; } /*