| To: vim_dev@googlegroups.com |
| Subject: Patch 7.3.822 |
| Fcc: outbox |
| From: Bram Moolenaar <Bram@moolenaar.net> |
| Mime-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| |
| Patch 7.3.822 (after 7.3.799) |
| Problem: Crash when accessing freed buffer. |
| Solution: Get 'textwidth' in caller of enter_buffer(). (Christian Brabandt) |
| Files: src/buffer.c |
| |
| |
| |
| |
| |
| *** 82,87 **** |
| --- 82,90 ---- |
| #ifdef FEAT_AUTOCMD |
| buf_T *old_curbuf; |
| #endif |
| + #ifdef FEAT_SYN_HL |
| + long old_tw = curbuf->b_p_tw; |
| + #endif |
| |
| /* |
| * The 'readonly' flag is only set when BF_NEVERLOADED is being reset. |
| |
| *** 113,118 **** |
| --- 116,125 ---- |
| } |
| EMSG(_("E83: Cannot allocate buffer, using other one...")); |
| enter_buffer(curbuf); |
| + #ifdef FEAT_SYN_HL |
| + if (old_tw != curbuf->b_p_tw) |
| + check_colorcolumn(curwin); |
| + #endif |
| return FAIL; |
| } |
| |
| |
| *** 786,791 **** |
| --- 793,801 ---- |
| # if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL) |
| cleanup_T cs; |
| # endif |
| + #ifdef FEAT_SYN_HL |
| + long old_tw = curbuf->b_p_tw; |
| + #endif |
| |
| if (swap_exists_action == SEA_QUIT) |
| { |
| |
| *** 804,810 **** |
| --- 814,826 ---- |
| if (!buf_valid(old_curbuf) || old_curbuf == curbuf) |
| old_curbuf = buflist_new(NULL, NULL, 1L, BLN_CURBUF | BLN_LISTED); |
| if (old_curbuf != NULL) |
| + { |
| enter_buffer(old_curbuf); |
| + #ifdef FEAT_SYN_HL |
| + if (old_tw != curbuf->b_p_tw) |
| + check_colorcolumn(curwin); |
| + #endif |
| + } |
| /* If "old_curbuf" is NULL we are in big trouble here... */ |
| |
| # if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL) |
| |
| *** 1364,1369 **** |
| --- 1380,1388 ---- |
| buf_T *prevbuf; |
| int unload = (action == DOBUF_UNLOAD || action == DOBUF_DEL |
| || action == DOBUF_WIPE); |
| + #ifdef FEAT_SYN_HL |
| + long old_tw = curbuf->b_p_tw; |
| + #endif |
| |
| setpcmark(); |
| if (!cmdmod.keepalt) |
| |
| *** 1430,1450 **** |
| # endif |
| ) |
| #endif |
| enter_buffer(buf); |
| } |
| |
| /* |
| * Enter a new current buffer. |
| ! * Old curbuf must have been abandoned already! |
| */ |
| void |
| enter_buffer(buf) |
| buf_T *buf; |
| { |
| - #ifdef FEAT_SYN_HL |
| - long old_tw = curbuf->b_p_tw; |
| - #endif |
| - |
| /* Copy buffer and window local option values. Not for a help buffer. */ |
| buf_copy_options(buf, BCO_ENTER | BCO_NOHELP); |
| if (!buf->b_help) |
| --- 1449,1472 ---- |
| # endif |
| ) |
| #endif |
| + { |
| enter_buffer(buf); |
| + #ifdef FEAT_SYN_HL |
| + if (old_tw != curbuf->b_p_tw) |
| + check_colorcolumn(curwin); |
| + #endif |
| + } |
| } |
| |
| /* |
| * Enter a new current buffer. |
| ! * Old curbuf must have been abandoned already! This also means "curbuf" may |
| ! * be pointing to freed memory. |
| */ |
| void |
| enter_buffer(buf) |
| buf_T *buf; |
| { |
| /* Copy buffer and window local option values. Not for a help buffer. */ |
| buf_copy_options(buf, BCO_ENTER | BCO_NOHELP); |
| if (!buf->b_help) |
| |
| *** 1468,1475 **** |
| |
| #ifdef FEAT_SYN_HL |
| curwin->w_s = &(buf->b_s); |
| - if (old_tw != buf->b_p_tw) |
| - check_colorcolumn(curwin); |
| #endif |
| |
| /* Cursor on first line by default. */ |
| --- 1490,1495 ---- |
| |
| |
| |
| *** 727,728 **** |
| --- 727,730 ---- |
| { /* Add new patch number below this line */ |
| + /**/ |
| + 822, |
| /**/ |
| |
| -- |
| Clothes make the man. Naked people have little or no influence on society. |
| -- Mark Twain (Samuel Clemens) (1835-1910) |
| |
| /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ |
| /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ |
| \\\ an exciting new programming language -- http://www.Zimbu.org /// |
| \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |