From aefd9b553327f33c4272ad05d053ef30adb8f191 Mon Sep 17 00:00:00 2001 From: Aric Stewart Date: Tue, 3 Jul 2012 10:21:47 -0500 Subject: [PATCH] comdlg32: Do not use GetDlgItemText to get combo box text during an CBN_SELCHANGE notification. --- dlls/comdlg32/printdlg.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/dlls/comdlg32/printdlg.c b/dlls/comdlg32/printdlg.c index 435d2e8d759..57b077b46d5 100644 --- a/dlls/comdlg32/printdlg.c +++ b/dlls/comdlg32/printdlg.c @@ -1783,9 +1783,13 @@ static LRESULT PRINTDLG_WMCommandA(HWND hDlg, WPARAM wParam, /* FALLTHROUGH */ case cmb4: /* Printer combobox */ if (HIWORD(wParam)==CBN_SELCHANGE) { - char PrinterName[256]; - GetDlgItemTextA(hDlg, LOWORD(wParam), PrinterName, 255); + char *PrinterName; + INT index = SendDlgItemMessageW(hDlg, LOWORD(wParam), CB_GETCURSEL, 0, 0); + INT length = SendDlgItemMessageW(hDlg, LOWORD(wParam), CB_GETLBTEXTLEN, index, 0); + PrinterName = HeapAlloc(GetProcessHeap(),0,length+1); + SendDlgItemMessageA(hDlg, LOWORD(wParam), CB_GETLBTEXT, index, (LPARAM)PrinterName); PRINTDLG_ChangePrinterA(hDlg, PrinterName, PrintStructures); + HeapFree(GetProcessHeap(),0,PrinterName); } break; @@ -1934,9 +1938,14 @@ static LRESULT PRINTDLG_WMCommandW(HWND hDlg, WPARAM wParam, /* FALLTHROUGH */ case cmb4: /* Printer combobox */ if (HIWORD(wParam)==CBN_SELCHANGE) { - WCHAR PrinterName[256]; - GetDlgItemTextW(hDlg, LOWORD(wParam), PrinterName, 255); + WCHAR *PrinterName; + INT index = SendDlgItemMessageW(hDlg, LOWORD(wParam), CB_GETCURSEL, 0, 0); + INT length = SendDlgItemMessageW(hDlg, LOWORD(wParam), CB_GETLBTEXTLEN, index, 0); + + PrinterName = HeapAlloc(GetProcessHeap(),0,sizeof(WCHAR)*(length+1)); + SendDlgItemMessageW(hDlg, LOWORD(wParam), CB_GETLBTEXT, index, (LPARAM)PrinterName); PRINTDLG_ChangePrinterW(hDlg, PrinterName, PrintStructures); + HeapFree(GetProcessHeap(),0,PrinterName); } break; @@ -3378,10 +3387,14 @@ static BOOL pagesetup_wm_command(HWND hDlg, WPARAM wParam, LPARAM lParam, pagese case cmb1: /* Printer combo */ if(msg == CBN_SELCHANGE) { - WCHAR name[256]; - GetDlgItemTextW(hDlg, id, name, sizeof(name) / sizeof(name[0])); + WCHAR *name; + INT index = SendDlgItemMessageW(hDlg, id, CB_GETCURSEL, 0, 0); + INT length = SendDlgItemMessageW(hDlg, id, CB_GETLBTEXTLEN, index, 0); + name = HeapAlloc(GetProcessHeap(),0,sizeof(WCHAR)*(length+1)); + SendDlgItemMessageW(hDlg, id, CB_GETLBTEXT, index, (LPARAM)name); pagesetup_change_printer(name, data); pagesetup_init_combos(hDlg, data); + HeapFree(GetProcessHeap(),0,name); } break; case cmb2: /* Paper combo */ -- 2.11.4.GIT