comdlg32: Do not use GetDlgItemText to get combo box text during an CBN_SELCHANGE notification.
diff --git a/dlls/comdlg32/printdlg.c b/dlls/comdlg32/printdlg.c
index 435d2e8..57b077b 100644
--- a/dlls/comdlg32/printdlg.c
+++ b/dlls/comdlg32/printdlg.c
@@ -1783,9 +1783,13 @@
/* 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 @@
/* 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 @@
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 */