Module: wine Branch: master Commit: c9fb3b7f8f1924e58ccc36caa73617f366853d3c URL: http://source.winehq.org/git/wine.git/?a=commit;h=c9fb3b7f8f1924e58ccc36caa7... Author: Nikolay Sivov <nsivov(a)codeweavers.com> Date: Tue Dec 22 00:55:00 2015 +0300 regedit: Fix potential buffer leak, simplify error handling (Coverity). Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- programs/regedit/treeview.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/programs/regedit/treeview.c b/programs/regedit/treeview.c index 008e6a1..7afc7bf 100644 --- a/programs/regedit/treeview.c +++ b/programs/regedit/treeview.c @@ -95,17 +95,17 @@ static BOOL get_item_path(HWND hwndTV, HTREEITEM hItem, HKEY* phKey, LPWSTR* pKe LPWSTR GetItemPath(HWND hwndTV, HTREEITEM hItem, HKEY* phRootKey) { - int pathLen = 0, maxLen; + int pathLen = 0, maxLen = 1024; WCHAR *pathBuffer; - pathBuffer = HeapAlloc(GetProcessHeap(), 0, 1024*sizeof(WCHAR)); + if (!hItem) { + hItem = (HTREEITEM)SendMessageW(hwndTV, TVM_GETNEXTITEM, TVGN_CARET, 0); + if (!hItem) return NULL; + } + + pathBuffer = HeapAlloc(GetProcessHeap(), 0, maxLen*sizeof(WCHAR)); if (!pathBuffer) return NULL; *pathBuffer = 0; - maxLen = HeapSize(GetProcessHeap(), 0, pathBuffer); - if (maxLen == (SIZE_T) - 1) return NULL; - maxLen = maxLen / sizeof(WCHAR); - if (!hItem) hItem = (HTREEITEM)SendMessageW(hwndTV, TVM_GETNEXTITEM, TVGN_CARET, 0); - if (!hItem) return NULL; if (!get_item_path(hwndTV, hItem, phRootKey, &pathBuffer, &pathLen, &maxLen)) return NULL; return pathBuffer; }