summaryrefslogtreecommitdiffstats
path: root/source/ap/vim/patches/7.3.390
blob: 7199f8e1836dffca72a72431716e295824ada721 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
To: vim_dev@googlegroups.com
Subject: Patch 7.3.390
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.390
Problem:    Using NULL buffer pointer in a window.
Solution:   Check for w_buffer being NULL in more places. (Bjorn Winckler)
Files:	    src/ex_cmds.c, src/quickfix.c, src/window.c


*** ../vim-7.3.389/src/ex_cmds.c	2011-11-30 17:01:55.000000000 +0100
--- src/ex_cmds.c	2011-12-30 14:59:57.000000000 +0100
***************
*** 3390,3395 ****
--- 3390,3402 ----
  				      (flags & ECMD_HIDE) ? 0 : DOBUF_UNLOAD);
  
  #ifdef FEAT_AUTOCMD
+ 		/* Autocommands may open a new window and leave oldwin open
+ 		 * which leads to crashes since the above call sets
+ 		 * oldwin->w_buffer to NULL. */
+ 		if (curwin != oldwin && oldwin != aucmd_win
+ 			     && win_valid(oldwin) && oldwin->w_buffer == NULL)
+ 		    win_close(oldwin, FALSE);
+ 
  # ifdef FEAT_EVAL
  		if (aborting())	    /* autocmds may abort script processing */
  		{
*** ../vim-7.3.389/src/quickfix.c	2011-08-10 18:36:49.000000000 +0200
--- src/quickfix.c	2011-12-30 14:45:19.000000000 +0100
***************
*** 2675,2681 ****
  bt_quickfix(buf)
      buf_T	*buf;
  {
!     return (buf->b_p_bt[0] == 'q');
  }
  
  /*
--- 2675,2681 ----
  bt_quickfix(buf)
      buf_T	*buf;
  {
!     return buf != NULL && buf->b_p_bt[0] == 'q';
  }
  
  /*
***************
*** 2686,2693 ****
  bt_nofile(buf)
      buf_T	*buf;
  {
!     return (buf->b_p_bt[0] == 'n' && buf->b_p_bt[2] == 'f')
! 	    || buf->b_p_bt[0] == 'a';
  }
  
  /*
--- 2686,2693 ----
  bt_nofile(buf)
      buf_T	*buf;
  {
!     return buf != NULL && ((buf->b_p_bt[0] == 'n' && buf->b_p_bt[2] == 'f')
! 	    || buf->b_p_bt[0] == 'a');
  }
  
  /*
***************
*** 2697,2703 ****
  bt_dontwrite(buf)
      buf_T	*buf;
  {
!     return (buf->b_p_bt[0] == 'n');
  }
  
      int
--- 2697,2703 ----
  bt_dontwrite(buf)
      buf_T	*buf;
  {
!     return buf != NULL && buf->b_p_bt[0] == 'n';
  }
  
      int
*** ../vim-7.3.389/src/window.c	2011-09-14 14:43:21.000000000 +0200
--- src/window.c	2011-12-30 14:44:18.000000000 +0100
***************
*** 2170,2176 ****
  
      /* When closing the help window, try restoring a snapshot after closing
       * the window.  Otherwise clear the snapshot, it's now invalid. */
!     if (win->w_buffer->b_help)
  	help_window = TRUE;
      else
  	clear_snapshot(curtab, SNAP_HELP_IDX);
--- 2170,2176 ----
  
      /* When closing the help window, try restoring a snapshot after closing
       * the window.  Otherwise clear the snapshot, it's now invalid. */
!     if (win->w_buffer != NULL && win->w_buffer->b_help)
  	help_window = TRUE;
      else
  	clear_snapshot(curtab, SNAP_HELP_IDX);
***************
*** 2214,2226 ****
  
  #ifdef FEAT_SYN_HL
      /* Free independent synblock before the buffer is freed. */
!     reset_synblock(win);
  #endif
  
      /*
       * Close the link to the buffer.
       */
!     close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0);
  
      /* Autocommands may have closed the window already, or closed the only
       * other window or moved to another tab page. */
--- 2214,2228 ----
  
  #ifdef FEAT_SYN_HL
      /* Free independent synblock before the buffer is freed. */
!     if (win->w_buffer != NULL)
! 	reset_synblock(win);
  #endif
  
      /*
       * Close the link to the buffer.
       */
!     if (win->w_buffer != NULL)
! 	close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0);
  
      /* Autocommands may have closed the window already, or closed the only
       * other window or moved to another tab page. */
*** ../vim-7.3.389/src/version.c	2011-12-30 14:14:16.000000000 +0100
--- src/version.c	2011-12-30 14:38:39.000000000 +0100
***************
*** 716,717 ****
--- 716,719 ----
  {   /* Add new patch number below this line */
+ /**/
+     390,
  /**/

-- 
There can't be a crisis today, my schedule is already full.

 /// 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    ///