Mercurial > vim
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 |