diff --git a/dlls/commdlg.dll16/printdlg.c b/dlls/commdlg.dll16/printdlg.c index 64bb3952351..ab6be7c0978 100644 --- a/dlls/commdlg.dll16/printdlg.c +++ b/dlls/commdlg.dll16/printdlg.c @@ -107,6 +107,8 @@ BOOL16 WINAPI PrintDlg16( LPPRINTDLG16 lppd ) PRINTDLGA pd32; BOOL ret; + if (!lppd) return PrintDlgA(NULL); /* generate failure with CDERR_INITIALIZATION */ + pd32.lStructSize = sizeof(pd32); pd32.Flags = lppd->Flags & ~(PD_ENABLEPRINTTEMPLATE | PD_ENABLEPRINTTEMPLATEHANDLE | PD_ENABLESETUPTEMPLATE | PD_ENABLESETUPTEMPLATEHANDLE | @@ -128,6 +130,9 @@ BOOL16 WINAPI PrintDlg16( LPPRINTDLG16 lppd ) if (lppd->Flags & PD_ENABLESETUPHOOK) FIXME( "custom setup hook %p no longer supported\n", lppd->lpfnSetupHook ); + /* Generate failure with CDERR_STRUCTSIZE, when needed */ + if (lppd->lStructSize != sizeof(PRINTDLG16)) pd32.lStructSize--; + if ((ret = PrintDlgA( &pd32 ))) { lppd->hDC = HDC_16( pd32.hDC );