Huw Davies : comdlg32: Add structure size checks.
Alexandre Julliard
julliard at winehq.org
Fri Sep 21 14:22:40 CDT 2012
Module: wine
Branch: master
Commit: 4c47385ea57ddcd35262590d6ee8d2a7bc2a3e63
URL: http://source.winehq.org/git/wine.git/?a=commit;h=4c47385ea57ddcd35262590d6ee8d2a7bc2a3e63
Author: Huw Davies <huw at codeweavers.com>
Date: Fri Sep 21 13:22:51 2012 +0100
comdlg32: Add structure size checks.
---
dlls/comdlg32/filedlg.c | 30 ++++++++++++++++++++++++++++++
1 files changed, 30 insertions(+), 0 deletions(-)
diff --git a/dlls/comdlg32/filedlg.c b/dlls/comdlg32/filedlg.c
index 3df67df..9ccd25c 100644
--- a/dlls/comdlg32/filedlg.c
+++ b/dlls/comdlg32/filedlg.c
@@ -4024,6 +4024,12 @@ static void MemFree(void *mem)
HeapFree(GetProcessHeap(),0,mem);
}
+static inline BOOL valid_struct_size( DWORD size )
+{
+ return (size == OPENFILENAME_SIZE_VERSION_400W) ||
+ (size == sizeof( OPENFILENAMEW ));
+}
+
static inline BOOL is_win16_looks(DWORD flags)
{
return (flags & (OFN_ALLOWMULTISELECT|OFN_ENABLEHOOK|OFN_ENABLETEMPLATE) &&
@@ -4047,6 +4053,12 @@ BOOL WINAPI GetOpenFileNameA(
{
TRACE("flags %08x\n", ofn->Flags);
+ if (!valid_struct_size( ofn->lStructSize ))
+ {
+ COMDLG32_SetCommDlgExtendedError( CDERR_STRUCTSIZE );
+ return FALSE;
+ }
+
/* OFN_FILEMUSTEXIST implies OFN_PATHMUSTEXIST */
if (ofn->Flags & OFN_FILEMUSTEXIST)
ofn->Flags |= OFN_PATHMUSTEXIST;
@@ -4072,6 +4084,12 @@ BOOL WINAPI GetOpenFileNameW(
{
TRACE("flags %08x\n", ofn->Flags);
+ if (!valid_struct_size( ofn->lStructSize ))
+ {
+ COMDLG32_SetCommDlgExtendedError( CDERR_STRUCTSIZE );
+ return FALSE;
+ }
+
/* OFN_FILEMUSTEXIST implies OFN_PATHMUSTEXIST */
if (ofn->Flags & OFN_FILEMUSTEXIST)
ofn->Flags |= OFN_PATHMUSTEXIST;
@@ -4096,6 +4114,12 @@ BOOL WINAPI GetOpenFileNameW(
BOOL WINAPI GetSaveFileNameA(
LPOPENFILENAMEA ofn) /* [in/out] address of init structure */
{
+ if (!valid_struct_size( ofn->lStructSize ))
+ {
+ COMDLG32_SetCommDlgExtendedError( CDERR_STRUCTSIZE );
+ return FALSE;
+ }
+
if (is_win16_looks(ofn->Flags))
return GetFileName31A(ofn, SAVE_DIALOG);
else
@@ -4115,6 +4139,12 @@ BOOL WINAPI GetSaveFileNameA(
BOOL WINAPI GetSaveFileNameW(
LPOPENFILENAMEW ofn) /* [in/out] address of init structure */
{
+ if (!valid_struct_size( ofn->lStructSize ))
+ {
+ COMDLG32_SetCommDlgExtendedError( CDERR_STRUCTSIZE );
+ return FALSE;
+ }
+
if (is_win16_looks(ofn->Flags))
return GetFileName31W(ofn, SAVE_DIALOG);
else
More information about the wine-cvs
mailing list