To: vim-dev@vim.org Subject: Patch 7.2.125 Fcc: outbox From: Bram Moolenaar 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 *** ../vim-7.2.124/src/gui_x11.c Wed Nov 12 13:07:48 2008 --- src/gui_x11.c Sun Feb 22 21:58:19 2009 *************** *** 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 *** ../vim-7.2.124/src/version.c Mon Feb 23 00:53:35 2009 --- src/version.c Tue Feb 24 04:09:33 2009 *************** *** 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 ///