Module: wine Branch: master Commit: 384ece4d7ee45515a3b1185d266c0c807791cab5 URL: http://source.winehq.org/git/wine.git/?a=commit;h=384ece4d7ee45515a3b1185d26...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Thu Jul 28 15:18:33 2016 +0300
comdlg32/itemdlg: Fix setting NULL file name (Coverity).
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/comdlg32/itemdlg.c | 12 ++++-------- dlls/comdlg32/tests/itemdlg.c | 15 +++++++++++++++ 2 files changed, 19 insertions(+), 8 deletions(-)
diff --git a/dlls/comdlg32/itemdlg.c b/dlls/comdlg32/itemdlg.c index 43261f4..8c2b9bc 100644 --- a/dlls/comdlg32/itemdlg.c +++ b/dlls/comdlg32/itemdlg.c @@ -384,14 +384,12 @@ static UINT get_file_name(FileDialogImpl *This, LPWSTR *str)
static BOOL set_file_name(FileDialogImpl *This, LPCWSTR str) { - HWND hwnd_edit = GetDlgItem(This->dlg_hwnd, IDC_FILENAME); - if(This->set_filename) LocalFree(This->set_filename);
- This->set_filename = StrDupW(str); + This->set_filename = str ? StrDupW(str) : NULL;
- return SendMessageW(hwnd_edit, WM_SETTEXT, 0, (LPARAM)str); + return SetDlgItemTextW(This->dlg_hwnd, IDC_FILENAME, This->set_filename); }
static void fill_filename_from_selection(FileDialogImpl *This) @@ -2608,10 +2606,8 @@ static HRESULT WINAPI IFileDialog2_fnGetFileName(IFileDialog2 *iface, LPWSTR *ps return E_INVALIDARG;
*pszName = NULL; - if(get_file_name(This, pszName)) - return S_OK; - else - return E_FAIL; + get_file_name(This, pszName); + return *pszName ? S_OK : E_FAIL; }
static HRESULT WINAPI IFileDialog2_fnSetTitle(IFileDialog2 *iface, LPCWSTR pszTitle) diff --git a/dlls/comdlg32/tests/itemdlg.c b/dlls/comdlg32/tests/itemdlg.c index b4fb480..d28e682 100644 --- a/dlls/comdlg32/tests/itemdlg.c +++ b/dlls/comdlg32/tests/itemdlg.c @@ -797,6 +797,21 @@ static void test_basics(void) ok(hr == S_OK, "got 0x%08x\n", hr); hr = IFileOpenDialog_SetFileName(pfod, null); ok(hr == S_OK, "got 0x%08x\n", hr); + + filename = NULL; + hr = IFileOpenDialog_GetFileName(pfod, &filename); + ok(hr == S_OK, "Got 0x%08x\n", hr); + ok(!lstrcmpW(filename, null), "Strings do not match.\n"); + CoTaskMemFree(filename); + + hr = IFileOpenDialog_SetFileName(pfod, NULL); + ok(hr == S_OK, "got 0x%08x\n", hr); + + filename = (void*)0xdeadbeef; + hr = IFileOpenDialog_GetFileName(pfod, &filename); + ok(hr == E_FAIL, "Got 0x%08x\n", hr); + ok(filename == NULL, "got %p.\n", filename); + hr = IFileOpenDialog_SetFileName(pfod, txt); ok(hr == S_OK, "got 0x%08x\n", hr); hr = IFileOpenDialog_GetFileName(pfod, &filename);