| To: vim-dev@vim.org |
| Subject: Patch 7.2.125 |
| Fcc: outbox |
| From: Bram Moolenaar <Bram@moolenaar.net> |
| Mime-Version: 1.0 |
| Content-Type: text/plain; charset=ISO-8859-1 |
| Content-Transfer-Encoding: 8bit |
| |
| |
| Patch 7.2.125 |
| Problem: Leaking memory when reading XPM bitmap for a sign. |
| Solution: Don't allocate the memory twice. (Dominique Pelle) |
| Files: src/gui_x11.c |
| |
| |
| |
| |
| |
| *** 1587,1592 **** |
| --- 1587,1594 ---- |
| XtCloseDisplay(gui.dpy); |
| gui.dpy = NULL; |
| vimShell = (Widget)0; |
| + vim_free(gui_argv); |
| + gui_argv = NULL; |
| } |
| |
| /* |
| |
| *** 1761,1766 **** |
| --- 1763,1770 ---- |
| * says that this isn't needed when exiting, so just skip it. */ |
| XtCloseDisplay(gui.dpy); |
| #endif |
| + vim_free(gui_argv); |
| + gui_argv = NULL; |
| } |
| |
| /* |
| |
| *** 3439,3485 **** |
| char_u *signfile; |
| { |
| XpmAttributes attrs; |
| ! XImage *sign; |
| int status; |
| |
| /* |
| * Setup the color substitution table. |
| */ |
| - sign = NULL; |
| if (signfile[0] != NUL && signfile[0] != '-') |
| { |
| ! sign = (XImage *)alloc(sizeof(XImage)); |
| ! if (sign != NULL) |
| { |
| ! XpmColorSymbol color[5] = |
| ! { |
| ! {"none", NULL, 0}, |
| ! {"iconColor1", NULL, 0}, |
| ! {"bottomShadowColor", NULL, 0}, |
| ! {"topShadowColor", NULL, 0}, |
| ! {"selectColor", NULL, 0} |
| ! }; |
| ! attrs.valuemask = XpmColorSymbols; |
| ! attrs.numsymbols = 2; |
| ! attrs.colorsymbols = color; |
| ! attrs.colorsymbols[0].pixel = gui.back_pixel; |
| ! attrs.colorsymbols[1].pixel = gui.norm_pixel; |
| ! status = XpmReadFileToImage(gui.dpy, (char *)signfile, |
| &sign, NULL, &attrs); |
| ! |
| ! if (status == 0) |
| ! { |
| ! /* Sign width is fixed at two columns now. |
| ! if (sign->width > gui.sign_width) |
| ! gui.sign_width = sign->width + 8; */ |
| ! } |
| ! else |
| ! { |
| ! vim_free(sign); |
| ! sign = NULL; |
| ! EMSG(_(e_signdata)); |
| ! } |
| } |
| } |
| |
| return (void *)sign; |
| --- 3443,3479 ---- |
| char_u *signfile; |
| { |
| XpmAttributes attrs; |
| ! XImage *sign = NULL; |
| int status; |
| |
| /* |
| * Setup the color substitution table. |
| */ |
| if (signfile[0] != NUL && signfile[0] != '-') |
| { |
| ! XpmColorSymbol color[5] = |
| { |
| ! {"none", NULL, 0}, |
| ! {"iconColor1", NULL, 0}, |
| ! {"bottomShadowColor", NULL, 0}, |
| ! {"topShadowColor", NULL, 0}, |
| ! {"selectColor", NULL, 0} |
| ! }; |
| ! attrs.valuemask = XpmColorSymbols; |
| ! attrs.numsymbols = 2; |
| ! attrs.colorsymbols = color; |
| ! attrs.colorsymbols[0].pixel = gui.back_pixel; |
| ! attrs.colorsymbols[1].pixel = gui.norm_pixel; |
| ! status = XpmReadFileToImage(gui.dpy, (char *)signfile, |
| &sign, NULL, &attrs); |
| ! if (status == 0) |
| ! { |
| ! /* Sign width is fixed at two columns now. |
| ! if (sign->width > gui.sign_width) |
| ! gui.sign_width = sign->width + 8; */ |
| } |
| + else |
| + EMSG(_(e_signdata)); |
| } |
| |
| return (void *)sign; |
| |
| *** 3489,3496 **** |
| gui_mch_destroy_sign(sign) |
| void *sign; |
| { |
| ! XFree(((XImage *)sign)->data); |
| ! vim_free(sign); |
| } |
| #endif |
| |
| --- 3483,3489 ---- |
| gui_mch_destroy_sign(sign) |
| void *sign; |
| { |
| ! XDestroyImage((XImage*)sign); |
| } |
| #endif |
| |
| |
| |
| |
| *** 678,679 **** |
| --- 678,681 ---- |
| { /* Add new patch number below this line */ |
| + /**/ |
| + 125, |
| /**/ |
| |
| -- |
| I have a watch cat! Just break in and she'll watch. |
| |
| /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ |
| /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ |
| \\\ download, build and distribute -- http://www.A-A-P.org /// |
| \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |