diff options
author | Marco Hinz <mh.codebro@gmail.com> | 2018-02-26 14:24:45 +0100 |
---|---|---|
committer | Marco Hinz <mh.codebro@gmail.com> | 2018-02-26 14:40:27 +0100 |
commit | 81a520e60edf7b87843dea1e9d9dabfb6f0d8ca8 (patch) | |
tree | 33bc898f095d696bd944f8b498fcbd845cc0fdbf | |
parent | f588113191e54905ae75ecc4b5991586d5aea240 (diff) | |
download | rneovim-81a520e60edf7b87843dea1e9d9dabfb6f0d8ca8.tar.gz rneovim-81a520e60edf7b87843dea1e9d9dabfb6f0d8ca8.tar.bz2 rneovim-81a520e60edf7b87843dea1e9d9dabfb6f0d8ca8.zip |
vim-patch:8.0.1439: if cscope fails a search Vim may hang
Problem: If cscope fails a search Vim may hang.
Solution: Bail out when a search error is encountered. (Safouane Baroudi,
closes vim/vim#2598)
https://github.com/vim/vim/commit/1274d33493efb6250470a37b9f4432bb31e87d64
-rw-r--r-- | src/nvim/if_cscope.c | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/src/nvim/if_cscope.c b/src/nvim/if_cscope.c index 773e29693c..5bd1fdfcfb 100644 --- a/src/nvim/if_cscope.c +++ b/src/nvim/if_cscope.c @@ -549,7 +549,7 @@ static void cs_reading_emsg( static int cs_cnt_matches(size_t idx) { char *stok; - int nlines; + int nlines = 0; char *buf = xmalloc(CSREAD_BUFSIZE); for (;; ) { @@ -569,16 +569,20 @@ static int cs_cnt_matches(size_t idx) return CSCOPE_FAILURE; } - /* - * If the database is out of date, or there's some other problem, - * cscope will output error messages before the number-of-lines output. - * Display/discard any output that doesn't match what we want. - * Accept "\S*cscope: X lines", also matches "mlcscope". - */ - if ((stok = strtok(buf, (const char *)" ")) == NULL) + // If the database is out of date, or there's some other problem, + // cscope will output error messages before the number-of-lines output. + // Display/discard any output that doesn't match what we want. + // Accept "\S*cscope: X lines", also matches "mlcscope". + // Bail out for the "Unable to search" error. + if (strstr((const char *)stok, "Unable to search database") != NULL) { + break; + } + if ((stok = strtok(buf, (const char *)" ")) == NULL) { continue; - if (strstr((const char *)stok, "cscope:") == NULL) + } + if (strstr((const char *)stok, "cscope:") == NULL) { continue; + } if ((stok = strtok(NULL, (const char *)" ")) == NULL) continue; |