Avoid memory leak on realloc failure in localRegisterFreeBoxCallback
Also avoids leaving invalid pointers in structures if realloc had to move them elsewhere to make them larger. Found by parfait 1.1 code analyzer: Memory leak of pointer 'newCallbacks' allocated with realloc(((char*)offman->FreeBoxesUpdateCallback), (8 * (offman->NumCallbacks + 1))) at line 328 of hw/xfree86/common/xf86fbman.c in function 'localRegisterFreeBoxCallback'. 'newCallbacks' allocated at line 320 with realloc(((char*)offman->FreeBoxesUpdateCallback), (8 * (offman->NumCallbacks + 1))). newCallbacks leaks when newCallbacks != NULL at line 327. Memory leak of pointer 'newPrivates' allocated with realloc(((char*)offman->devPrivates), (8 * (offman->NumCallbacks + 1))) at line 328 of hw/xfree86/common/xf86fbman.c in function 'localRegisterFreeBoxCallback'. 'newPrivates' allocated at line 324 with realloc(((char*)offman->devPrivates), (8 * (offman->NumCallbacks + 1))). newPrivates leaks when newCallbacks == NULL at line 327. Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
08f75d3a96
commit
563db909bc
@ -320,14 +320,16 @@ localRegisterFreeBoxCallback(ScreenPtr pScreen,
|
||||
newCallbacks = realloc(offman->FreeBoxesUpdateCallback,
|
||||
sizeof(FreeBoxCallbackProcPtr) *
|
||||
(offman->NumCallbacks + 1));
|
||||
if (!newCallbacks)
|
||||
return FALSE;
|
||||
else
|
||||
offman->FreeBoxesUpdateCallback = newCallbacks;
|
||||
|
||||
newPrivates = realloc(offman->devPrivates,
|
||||
sizeof(DevUnion) * (offman->NumCallbacks + 1));
|
||||
|
||||
if (!newCallbacks || !newPrivates)
|
||||
if (!newPrivates)
|
||||
return FALSE;
|
||||
|
||||
offman->FreeBoxesUpdateCallback = newCallbacks;
|
||||
else
|
||||
offman->devPrivates = newPrivates;
|
||||
|
||||
offman->FreeBoxesUpdateCallback[offman->NumCallbacks] = FreeBoxCallback;
|
||||
|
Loading…
Reference in New Issue
Block a user