Mercurial > vim
view src/gui_xmebw.h @ 34627:5071d4c3ff2e v9.1.0202
patch 9.1.0202: leaking memory in add_user() on failure
Commit: https://github.com/vim/vim/commit/7a2f217988afa1c35b9c093a9d3477198ea250b9
Author: Christian Brabandt <cb@256bit.org>
Date: Sun Mar 24 09:50:03 2024 +0100
patch 9.1.0202: leaking memory in add_user() on failure
Problem: leaking memory in add_user() (LuMingYinDetect)
Solution: free user_copy pointer instead of the user ptr
add_user() is called with a user pointer and the user pointer comes
from these functions:
- return value from the getpwent() function (Unix).
- return value from the getpwnam() function (Unix).
- return value from the NetUserEnum() function (MS Windows).
For the first 2 callers, the man page for those functions directly says,
one should not free the returned pointer (since it comes from static
memory).
For the third caller (on MS Windows), the returned buffer is already
freed directly after calling the add_user() function in
NetApiBufferFree(), so this would lead to a double free().
This all indicates, the user ptr is wrongly freed in the add_user()
function and the intention was to free the user_copy pointer instead in
case of an error.
So let's just use that now.
fixes: #14250
closes: #14260
Signed-off-by: Christian Brabandt <cb@256bit.org>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sun, 24 Mar 2024 10:00:09 +0100 |
parents | 4aead6a9b7a9 |
children |
line wrap: on
line source
/* vi:set ts=8 sts=4 sw=4 noet: * * VIM - Vi IMproved by Bram Moolenaar * * Do ":help uganda" in Vim to read copying and usage conditions. * Do ":help credits" in Vim to see a list of people who contributed. * See README.txt for an overview of the Vim source code. */ /* * * (C) 2002,2005 by Marcin Dalecki <martin@dalecki.de> * * MARCIN DALECKI ASSUMES NO RESPONSIBILITY FOR THE USE OR INABILITY TO USE ANY * OF THIS SOFTWARE . THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY * KIND, AND MARCIN DALECKI EXPRESSLY DISCLAIMS ALL IMPLIED WARRANTIES, * INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE. */ #ifndef EnhancedB_H #define EnhancedB_H /* * New resources for the Extended Pushbutton widget */ #ifndef XmNshift # define XmNshift "shift" #endif #ifndef XmCShift # define XmCShift "Shift" #endif #ifndef XmNlabelLocation # define XmNlabelLocation "labelLocation" #endif #ifndef XmCLocation # define XmCLocation "Location" #endif #ifndef XmNpixmapData # define XmNpixmapData "pixmapData" #endif #ifndef XmNpixmapFile # define XmNpixmapFile "pixmapFile" #endif /* * Constants for labelLocation. */ #ifdef HAVE_XM_JOINSIDET_H # include <Xm/JoinSideT.h> #else # define XmLEFT 1 # define XmRIGHT 2 # define XmTOP 3 # define XmBOTTOM 4 #endif #define XmIsEnhancedButton(w) XtIsSubclass(w, xmEnhancedButtonWidgetClass) /* * Convenience creation function. */ extern Widget XgCreateEPushButtonWidget(Widget, char *, ArgList, Cardinal); extern WidgetClass xmEnhancedButtonWidgetClass; typedef struct _XmEnhancedButtonClassRec *XmEnhancedButtonWidgetClass; typedef struct _XmEnhancedButtonRec *XmEnhancedButtonWidget; #endif