comparison src/channel.c @ 7916:54602dcac207 v7.4.1254

commit https://github.com/vim/vim/commit/3b05b135e3ee4cfd59983fd63461e8f7642c1713 Author: Bram Moolenaar <Bram@vim.org> Date: Wed Feb 3 23:25:07 2016 +0100 patch 7.4.1254 Problem: Opening a second channel causes a crash. (Ken Takata) Solution: Don't re-allocate the array with channels.
author Christian Brabandt <cb@256bit.org>
date Wed, 03 Feb 2016 23:30:04 +0100
parents ea1fd8d750a6
children ce5a7a613867
comparison
equal deleted inserted replaced
7915:72085904c404 7916:54602dcac207
131 */ 131 */
132 static int 132 static int
133 add_channel(void) 133 add_channel(void)
134 { 134 {
135 int idx; 135 int idx;
136 channel_T *new_channels;
137 channel_T *ch; 136 channel_T *ch;
138 137
139 if (channels != NULL) 138 if (channels != NULL)
139 {
140 for (idx = 0; idx < channel_count; ++idx) 140 for (idx = 0; idx < channel_count; ++idx)
141 if (channels[idx].ch_fd < 0) 141 if (channels[idx].ch_fd < 0)
142 /* re-use a closed channel slot */ 142 /* re-use a closed channel slot */
143 return idx; 143 return idx;
144 if (channel_count == MAX_OPEN_CHANNELS) 144 if (channel_count == MAX_OPEN_CHANNELS)
145 return -1; 145 return -1;
146 new_channels = (channel_T *)alloc(sizeof(channel_T) * (channel_count + 1)); 146 }
147 if (new_channels == NULL) 147 else
148 return -1; 148 {
149 if (channels != NULL) 149 channels = (channel_T *)alloc((int)sizeof(channel_T)
150 mch_memmove(new_channels, channels, sizeof(channel_T) * channel_count); 150 * MAX_OPEN_CHANNELS);
151 channels = new_channels; 151 if (channels == NULL)
152 return -1;
153 }
154
152 ch = &channels[channel_count]; 155 ch = &channels[channel_count];
153 (void)vim_memset(ch, 0, sizeof(channel_T)); 156 (void)vim_memset(ch, 0, sizeof(channel_T));
154 157
155 ch->ch_fd = (sock_T)-1; 158 ch->ch_fd = (sock_T)-1;
156 #ifdef FEAT_GUI_X11 159 #ifdef FEAT_GUI_X11