updated for version 7.3.746
Problem: Memory leaks when using location lists.
Solution: Set qf_title to something. (Christian Brabandt)
diff --git a/src/quickfix.c b/src/quickfix.c
index 2a485f0..ac93669 100644
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -2124,15 +2124,22 @@
int idx;
{
qfline_T *qfp;
+ int stop = FALSE;
while (qi->qf_lists[idx].qf_count)
{
qfp = qi->qf_lists[idx].qf_start->qf_next;
- if (qi->qf_lists[idx].qf_title != NULL)
+ if (qi->qf_lists[idx].qf_title != NULL && !stop)
{
vim_free(qi->qf_lists[idx].qf_start->qf_text);
+ stop = (qi->qf_lists[idx].qf_start == qfp);
vim_free(qi->qf_lists[idx].qf_start->qf_pattern);
vim_free(qi->qf_lists[idx].qf_start);
+ if (stop)
+ /* Somehow qf_count may have an incorrect value, set it to 1
+ * to avoid crashing when it's wrong.
+ * TODO: Avoid qf_count being incorrect. */
+ qi->qf_lists[idx].qf_count = 1;
}
qi->qf_lists[idx].qf_start = qfp;
--qi->qf_lists[idx].qf_count;