aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarco Hinz <mh.codebro@gmail.com>2018-02-26 14:24:45 +0100
committerMarco Hinz <mh.codebro@gmail.com>2018-02-26 14:40:27 +0100
commit81a520e60edf7b87843dea1e9d9dabfb6f0d8ca8 (patch)
tree33bc898f095d696bd944f8b498fcbd845cc0fdbf
parentf588113191e54905ae75ecc4b5991586d5aea240 (diff)
downloadrneovim-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.c22
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;