Module: wine Branch: master Commit: 1ac7096728dbb46a56f84fa0d25fdc3cc5282519 URL: http://source.winehq.org/git/wine.git/?a=commit;h=1ac7096728dbb46a56f84fa0d2...
Author: Pierre Schweitzer pierre@reactos.org Date: Tue Dec 6 21:52:51 2011 +0100
msacm32: Fix buffer double free.
---
dlls/msacm32/internal.c | 12 ++++++++++-- 1 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/dlls/msacm32/internal.c b/dlls/msacm32/internal.c index 239f4d3..b3f6bf3 100644 --- a/dlls/msacm32/internal.c +++ b/dlls/msacm32/internal.c @@ -1016,6 +1016,9 @@ PWINE_ACMLOCALDRIVERINST MSACM_OpenLocalDriver(PWINE_ACMLOCALDRIVER paldrv, LPAR PWINE_ACMLOCALDRIVERINST pDrvInst;
pDrvInst = HeapAlloc(MSACM_hHeap, 0, sizeof(WINE_ACMLOCALDRIVERINST)); + if (!pDrvInst) + return NULL; + pDrvInst->pLocalDriver = paldrv; pDrvInst->dwDriverID = 0; pDrvInst->pNextACMInst = NULL; @@ -1037,9 +1040,14 @@ PWINE_ACMLOCALDRIVERINST MSACM_OpenLocalDriver(PWINE_ACMLOCALDRIVER paldrv, LPAR ret = MSACM_OpenLocalDriver(paldrv, lParam2); if (!ret) { - MSACM_CloseLocalDriver(pDrvInst); ERR("load1 failed\n"); - goto exit; + /* If MSACM_CloseLocalDriver returns TRUE, + * then pDrvInst has been freed + */ + if (!MSACM_CloseLocalDriver(pDrvInst)) + goto exit; + + return NULL; } pDrvInst->bSession = TRUE; return ret;