aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames McCoy <jamessan@jamessan.com>2016-11-12 15:58:19 -0500
committerJames McCoy <jamessan@jamessan.com>2016-11-15 23:16:09 -0500
commit2e5736e2cd4ef14ec23c1e0176fbcb17c9f55eba (patch)
tree263692e3c77d12d9671af0bddda2e360443f29f7
parent830bf8665b6a98705b16d977ca7d11c2ca51dca8 (diff)
downloadrneovim-2e5736e2cd4ef14ec23c1e0176fbcb17c9f55eba.tar.gz
rneovim-2e5736e2cd4ef14ec23c1e0176fbcb17c9f55eba.tar.bz2
rneovim-2e5736e2cd4ef14ec23c1e0176fbcb17c9f55eba.zip
vim-patch:7.4.1664
Problem: Crash in :cgetexpr. Solution: Check for NULL pointer. (Dominique) Add a test. https://github.com/vim/vim/commit/89c64d557dbe0bacfdd7b2872411b00cc1523d85
-rw-r--r--src/nvim/quickfix.c4
-rw-r--r--src/nvim/version.c2
-rw-r--r--test/functional/legacy/quickfix_spec.lua6
3 files changed, 10 insertions, 2 deletions
diff --git a/src/nvim/quickfix.c b/src/nvim/quickfix.c
index 6bb863985e..188de92809 100644
--- a/src/nvim/quickfix.c
+++ b/src/nvim/quickfix.c
@@ -483,8 +483,10 @@ qf_init_ext (
p_str += len;
} else if (tv->v_type == VAR_LIST) {
/* Get the next line from the supplied list */
- while (p_li && p_li->li_tv.v_type != VAR_STRING)
+ while (p_li && (p_li->li_tv.v_type != VAR_STRING
+ || p_li->li_tv.vval.v_string == NULL)) {
p_li = p_li->li_next; /* Skip non-string items */
+ }
if (!p_li) /* End of the list */
break;
diff --git a/src/nvim/version.c b/src/nvim/version.c
index b286f03301..d0b802418d 100644
--- a/src/nvim/version.c
+++ b/src/nvim/version.c
@@ -780,7 +780,7 @@ static int included_patches[] = {
// 1667 NA
// 1666 NA
// 1665 NA
- // 1664,
+ 1664,
1663,
// 1662 NA
// 1661 NA
diff --git a/test/functional/legacy/quickfix_spec.lua b/test/functional/legacy/quickfix_spec.lua
index 5e5aefc4e6..5787ff8ff3 100644
--- a/test/functional/legacy/quickfix_spec.lua
+++ b/test/functional/legacy/quickfix_spec.lua
@@ -540,6 +540,12 @@ describe('helpgrep', function()
call('Test_caddbuffer_to_empty')
expected_empty()
end)
+
+ it('cgetexpr does not crash with a NULL element in a list', function()
+ execute('cgetexpr [$x]')
+ -- Still alive?
+ eq(2, eval('1+1'))
+ end)
end)
describe('errorformat', function()