To: vim-dev@vim.org Subject: Patch 7.2b.004 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit ------------ Patch 7.2b.004 Problem: Trying to free memory for a static string when using ":helpgrep". (George Reilly) Solution: Set 'cpo' to empty_option instead of an empty string. Also for searchpair() and substitute(). Files: src/quickfix.c, src/eval.c *** ../vim-7.2b.003/src/quickfix.c Sun Jul 13 19:15:19 2008 --- src/quickfix.c Mon Jul 14 19:54:22 2008 *************** *** 3779,3785 **** /* Make 'cpoptions' empty, the 'l' flag should not be used here. */ save_cpo = p_cpo; ! p_cpo = (char_u *)""; #ifdef FEAT_MULTI_LANG /* Check for a specified language */ --- 3779,3785 ---- /* Make 'cpoptions' empty, the 'l' flag should not be used here. */ save_cpo = p_cpo; ! p_cpo = empty_option; #ifdef FEAT_MULTI_LANG /* Check for a specified language */ *************** *** 3889,3895 **** qi->qf_lists[qi->qf_curlist].qf_index = 1; } ! p_cpo = save_cpo; #ifdef FEAT_WINDOWS qf_update_buffer(qi); --- 3889,3899 ---- qi->qf_lists[qi->qf_curlist].qf_index = 1; } ! if (p_cpo == empty_option) ! p_cpo = save_cpo; ! else ! /* Darn, some plugin changed the value. */ ! free_string_option(save_cpo); #ifdef FEAT_WINDOWS qf_update_buffer(qi); *** ../vim-7.2b.003/src/eval.c Sun Jul 13 19:15:10 2008 --- src/eval.c Mon Jul 14 23:03:12 2008 *************** *** 14997,15003 **** /* Make 'cpoptions' empty, the 'l' flag should not be used here. */ save_cpo = p_cpo; ! p_cpo = (char_u *)""; #ifdef FEAT_RELTIME /* Set the time limit, if there is one. */ --- 14997,15003 ---- /* Make 'cpoptions' empty, the 'l' flag should not be used here. */ save_cpo = p_cpo; ! p_cpo = empty_option; #ifdef FEAT_RELTIME /* Set the time limit, if there is one. */ *************** *** 15112,15118 **** theend: vim_free(pat2); vim_free(pat3); ! p_cpo = save_cpo; return retval; } --- 15112,15122 ---- theend: vim_free(pat2); vim_free(pat3); ! if (p_cpo == empty_option) ! p_cpo = save_cpo; ! else ! /* Darn, evaluating the {skip} expression changed the value. */ ! free_string_option(save_cpo); return retval; } *************** *** 22503,22509 **** /* Make 'cpoptions' empty, so that the 'l' flag doesn't work here */ save_cpo = p_cpo; ! p_cpo = (char_u *)""; ga_init2(&ga, 1, 200); --- 22507,22513 ---- /* Make 'cpoptions' empty, so that the 'l' flag doesn't work here */ save_cpo = p_cpo; ! p_cpo = empty_option; ga_init2(&ga, 1, 200); *************** *** 22564,22570 **** ret = vim_strsave(ga.ga_data == NULL ? str : (char_u *)ga.ga_data); ga_clear(&ga); ! p_cpo = save_cpo; return ret; } --- 22568,22578 ---- ret = vim_strsave(ga.ga_data == NULL ? str : (char_u *)ga.ga_data); ga_clear(&ga); ! if (p_cpo == empty_option) ! p_cpo = save_cpo; ! else ! /* Darn, evaluating {sub} expression changed the value. */ ! free_string_option(save_cpo); return ret; } *** ../vim-7.2b.003/src/version.c Mon Jul 14 21:47:27 2008 --- src/version.c Mon Jul 14 23:01:13 2008 *************** *** 678,679 **** --- 678,681 ---- { /* Add new patch number below this line */ + /**/ + 4, /**/ -- Hear about the guy who played a blank tape at full blast? The mime next door went nuts. /// 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 ///