To: vim-dev@vim.org Subject: Patch 7.2b.023 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit ------------ Patch 7.2b.023 Problem: Crash when using the result of synstack(0,0). (Matt Wozniski) Solution: Check for v_list to be NULL in a few more places. Files: src/eval.c *** ../vim-7.2b.022/src/eval.c Thu Jul 24 18:44:23 2008 --- src/eval.c Sun Jul 27 14:31:11 2008 *************** *** 1275,1281 **** if (dolist && tv.v_type == VAR_LIST) { ga_init2(&ga, (int)sizeof(char), 80); ! list_join(&ga, tv.vval.v_list, (char_u *)"\n", TRUE, 0); ga_append(&ga, NUL); retval = (char_u *)ga.ga_data; } --- 1275,1282 ---- if (dolist && tv.v_type == VAR_LIST) { ga_init2(&ga, (int)sizeof(char), 80); ! if (tv.vval.v_list != NULL) ! list_join(&ga, tv.vval.v_list, (char_u *)"\n", TRUE, 0); ga_append(&ga, NUL); retval = (char_u *)ga.ga_data; } *************** *** 1380,1385 **** --- 1381,1387 ---- /* * Evaluate an expression to a list with suggestions. * For the "expr:" part of 'spellsuggest'. + * Returns NULL when there is an error. */ list_T * eval_spell_expr(badword, expr) *************** *** 1587,1594 **** # endif /* ! * Call vimL function "func" and return the result as a list * Uses argv[argc] for the function arguments. */ void * call_func_retlist(func, argc, argv, safe) --- 1589,1597 ---- # endif /* ! * Call vimL function "func" and return the result as a List. * Uses argv[argc] for the function arguments. + * Returns NULL when there is something wrong. */ void * call_func_retlist(func, argc, argv, safe) *************** *** 5817,5822 **** --- 5820,5827 ---- { listitem_T *item1, *item2; + if (l1 == NULL || l2 == NULL) + return FALSE; if (l1 == l2) return TRUE; if (list_len(l1) != list_len(l2)) *************** *** 5855,5860 **** --- 5860,5867 ---- dictitem_T *item2; int todo; + if (d1 == NULL || d2 == NULL) + return FALSE; if (d1 == d2) return TRUE; if (dict_len(d1) != dict_len(d2)) *************** *** 6243,6248 **** --- 6250,6258 ---- { list_T *l; + if (l1 == NULL || l2 == NULL) + return FAIL; + /* make a copy of the first list. */ l = list_copy(l1, FALSE, 0); if (l == NULL) *** ../vim-7.2b.022/src/version.c Sat Jul 26 16:03:55 2008 --- src/version.c Sun Jul 27 15:54:45 2008 *************** *** 678,679 **** --- 678,681 ---- { /* Add new patch number below this line */ + /**/ + 23, /**/ -- ARTHUR: Well, I AM king... DENNIS: Oh king, eh, very nice. An' how'd you get that, eh? By exploitin' the workers -- by 'angin' on to outdated imperialist dogma which perpetuates the economic an' social differences in our society! If there's ever going to be any progress-- The Quest for the Holy Grail (Monty Python) /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ download, build and distribute -- http://www.A-A-P.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///