diff --git a/dlls/krnl386.exe16/vxd.c b/dlls/krnl386.exe16/vxd.c index 5d280fb2fda..c0f16329027 100644 --- a/dlls/krnl386.exe16/vxd.c +++ b/dlls/krnl386.exe16/vxd.c @@ -140,25 +140,28 @@ HANDLE __wine_vxd_open( LPCWSTR filenameW, DWORD access, SECURITY_ATTRIBUTES *sa int i; HANDLE handle; HMODULE module; - WCHAR *p, name[16]; + WCHAR *p, name[13]; /* normalize the filename */ - if (lstrlenW( filenameW ) >= ARRAY_SIZE(name) - 4 || - wcschr( filenameW, '/' ) || wcschr( filenameW, '\\' )) + if (wcschr( filenameW, '/' ) || wcschr( filenameW, '\\' )) { SetLastError( ERROR_FILE_NOT_FOUND ); return 0; } - lstrcpyW( name, filenameW ); - wcslwr( name ); - p = wcschr( name, '.' ); - if (!p) lstrcatW( name, dotVxDW ); - else if (wcsicmp( p, dotVxDW )) /* existing extension has to be .vxd */ + p = wcschr( filenameW, '.' ); + if (!p && lstrlenW( filenameW ) <= 8) { + lstrcpyW( name, filenameW ); + lstrcatW( name, dotVxDW ); + } + else if (p && wcsicmp( p, dotVxDW ) == 0 && lstrlenW( filenameW ) <= 12) /* existing extension has to be .vxd */ + lstrcpyW( name, filenameW ); + else { SetLastError( ERROR_FILE_NOT_FOUND ); return 0; } + wcslwr( name ); /* try to load the module first */