diff options
author | Chris Hall <followingthepath@gmail.com> | 2017-06-19 10:01:29 +1000 |
---|---|---|
committer | Justin M. Keyes <justinkz@gmail.com> | 2017-06-19 02:01:29 +0200 |
commit | 76ea97c809e50fccc5ca6615943ac6da1db1e030 (patch) | |
tree | 5c48057ef39185f27e8e6871d2d6282b209b85ef | |
parent | 26235bc050abece269737fd2b77bbc392d45ffc1 (diff) | |
download | rneovim-76ea97c809e50fccc5ca6615943ac6da1db1e030.tar.gz rneovim-76ea97c809e50fccc5ca6615943ac6da1db1e030.tar.bz2 rneovim-76ea97c809e50fccc5ca6615943ac6da1db1e030.zip |
coverity/155506: fixing "dereference null after check" (#6862)
rbuffer_read_ptr may return a null
if ptr == null && cnt == 0 && !out_data_decide_throttle(cnt)
then we would have called out_data_append_to_screen(ptr, cnt, eof)
which dereferences the null pointer.
-rw-r--r-- | src/nvim/os/shell.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/nvim/os/shell.c b/src/nvim/os/shell.c index 8767287cf3..9d80a43718 100644 --- a/src/nvim/os/shell.c +++ b/src/nvim/os/shell.c @@ -496,8 +496,12 @@ static void out_data_cb(Stream *stream, RBuffer *buf, size_t count, void *data, size_t cnt; char *ptr = rbuffer_read_ptr(buf, &cnt); - if (ptr != NULL && cnt > 0 - && out_data_decide_throttle(cnt)) { // Skip output above a threshold. + if (ptr == NULL || cnt == 0) { + // Nothing to read; + return; + } + + if (out_data_decide_throttle(cnt)) { // Skip output above a threshold. // Save the skipped output. If it is the final chunk, we display it later. out_data_ring(ptr, cnt); } else { |