| To: vim_dev@googlegroups.com |
| Subject: Patch 7.4.624 |
| 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.4.624 |
| Problem: May leak memory or crash when vim_realloc() returns NULL. |
| Solution: Handle a NULL value properly. (Mike Williams) |
| Files: src/if_cscope.c, src/memline.c, src/misc1.c, src/netbeans.c |
| |
| |
| |
| |
| |
| *** 1507,1515 **** |
| --- 1507,1522 ---- |
| } |
| else |
| { |
| + csinfo_T *t_csinfo = csinfo; |
| + |
| /* Reallocate space for more connections. */ |
| csinfo_size *= 2; |
| csinfo = vim_realloc(csinfo, sizeof(csinfo_T)*csinfo_size); |
| + if (csinfo == NULL) |
| + { |
| + vim_free(t_csinfo); |
| + csinfo_size = 0; |
| + } |
| } |
| if (csinfo == NULL) |
| return -1; |
| |
| *** 2059,2064 **** |
| --- 2066,2072 ---- |
| int num_matches; |
| { |
| char *buf = NULL; |
| + char *t_buf; |
| int bufsize = 0; /* Track available bufsize */ |
| int newsize = 0; |
| char *ptag; |
| |
| *** 2120,2128 **** |
| --- 2128,2140 ---- |
| newsize = (int)(strlen(csfmt_str) + 16 + strlen(lno)); |
| if (bufsize < newsize) |
| { |
| + t_buf = buf; |
| buf = (char *)vim_realloc(buf, newsize); |
| if (buf == NULL) |
| + { |
| bufsize = 0; |
| + vim_free(t_buf); |
| + } |
| else |
| bufsize = newsize; |
| } |
| |
| *** 2143,2151 **** |
| --- 2155,2167 ---- |
| |
| if (bufsize < newsize) |
| { |
| + t_buf = buf; |
| buf = (char *)vim_realloc(buf, newsize); |
| if (buf == NULL) |
| + { |
| bufsize = 0; |
| + vim_free(t_buf); |
| + } |
| else |
| bufsize = newsize; |
| } |
| |
| |
| |
| *** 5057,5062 **** |
| --- 5057,5064 ---- |
| /* May resize here so we don't have to do it in both cases below */ |
| if (buf->b_ml.ml_usedchunks + 1 >= buf->b_ml.ml_numchunks) |
| { |
| + chunksize_T *t_chunksize = buf->b_ml.ml_chunksize; |
| + |
| buf->b_ml.ml_numchunks = buf->b_ml.ml_numchunks * 3 / 2; |
| buf->b_ml.ml_chunksize = (chunksize_T *) |
| vim_realloc(buf->b_ml.ml_chunksize, |
| |
| *** 5064,5069 **** |
| --- 5066,5072 ---- |
| if (buf->b_ml.ml_chunksize == NULL) |
| { |
| /* Hmmmm, Give up on offset for this buffer */ |
| + vim_free(t_chunksize); |
| buf->b_ml.ml_usedchunks = -1; |
| return; |
| } |
| |
| |
| |
| *** 3431,3440 **** |
| --- 3431,3444 ---- |
| buf = alloc(buflen); |
| else if (maxlen < 10) |
| { |
| + char_u *t_buf = buf; |
| + |
| /* Need some more space. This might happen when receiving a long |
| * escape sequence. */ |
| buflen += 100; |
| buf = vim_realloc(buf, buflen); |
| + if (buf == NULL) |
| + vim_free(t_buf); |
| maxlen = (buflen - 6 - len) / 3; |
| } |
| if (buf == NULL) |
| |
| |
| |
| *** 1080,1089 **** |
| --- 1080,1097 ---- |
| { |
| if (bufno >= buf_list_size) /* grow list */ |
| { |
| + nbbuf_T *t_buf_list = buf_list; |
| + |
| incr = bufno - buf_list_size + 90; |
| buf_list_size += incr; |
| buf_list = (nbbuf_T *)vim_realloc( |
| buf_list, buf_list_size * sizeof(nbbuf_T)); |
| + if (buf_list == NULL) |
| + { |
| + vim_free(t_buf_list); |
| + buf_list_size = 0; |
| + return NULL; |
| + } |
| vim_memset(buf_list + buf_list_size - incr, 0, |
| incr * sizeof(nbbuf_T)); |
| } |
| |
| *** 3678,3688 **** |
| --- 3686,3703 ---- |
| { |
| int incr; |
| int oldlen = globalsignmaplen; |
| + char **t_globalsignmap = globalsignmap; |
| |
| globalsignmaplen *= 2; |
| incr = globalsignmaplen - oldlen; |
| globalsignmap = (char **)vim_realloc(globalsignmap, |
| globalsignmaplen * sizeof(char *)); |
| + if (globalsignmap == NULL) |
| + { |
| + vim_free(t_globalsignmap); |
| + globalsignmaplen = 0; |
| + return; |
| + } |
| vim_memset(globalsignmap + oldlen, 0, incr * sizeof(char *)); |
| } |
| } |
| |
| *** 3708,3718 **** |
| --- 3723,3740 ---- |
| { |
| int incr; |
| int oldlen = buf->signmaplen; |
| + int *t_signmap = buf->signmap; |
| |
| buf->signmaplen *= 2; |
| incr = buf->signmaplen - oldlen; |
| buf->signmap = (int *)vim_realloc(buf->signmap, |
| buf->signmaplen * sizeof(int)); |
| + if (buf->signmap == NULL) |
| + { |
| + vim_free(t_signmap); |
| + buf->signmaplen = 0; |
| + return; |
| + } |
| vim_memset(buf->signmap + oldlen, 0, incr * sizeof(int)); |
| } |
| } |
| |
| |
| |
| *** 743,744 **** |
| --- 743,746 ---- |
| { /* Add new patch number below this line */ |
| + /**/ |
| + 624, |
| /**/ |
| |
| -- |
| hundred-and-one symptoms of being an internet addict: |
| 211. Your husband leaves you...taking the computer with him and you |
| call him crying, and beg him to bring the computer back. |
| |
| /// 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 /// |