[Bug 37882] New: user32.GetKeyboardLayoutNameA/W can't handle NULL out parameter, causing crash in custom application
wine-bugs at winehq.org
wine-bugs at winehq.org
Sun Jan 11 12:46:19 CST 2015
https://bugs.winehq.org/show_bug.cgi?id=37882
Bug ID: 37882
Summary: user32.GetKeyboardLayoutNameA/W can't handle NULL out
parameter, causing crash in custom application
Product: Wine
Version: 1.7.34
Hardware: x86-64
OS: Linux
Status: NEW
Severity: normal
Priority: P2
Component: user32
Assignee: wine-bugs at winehq.org
Reporter: focht at gmx.net
Distribution: ---
Hello folks,
as the summary says.
A user in #winehq asked about this and I looked into it.
Kind of non-standard use case but since Wine strives to be compatible with as
many Windows apps as possible this should work too.
Relevant part of trace log:
--- snip ---
...
003d:Starting process
L"Z:\\home\\focht\\Downloads\\44217C15F30538A1FBDF614C9785C9B7.exe"
(entryproc=0x437927)
003d:Call user32.GetKeyboardLayoutNameW(00000000) ret=00437377
003d:Call PE DLL (proc=0x7dd53e78,module=0x7dcf0000
L"winex11.drv",reason=PROCESS_ATTACH,res=(nil))
003d:Ret PE DLL (proc=0x7dd53e78,module=0x7dcf0000
L"winex11.drv",reason=PROCESS_ATTACH,res=(nil)) retval=1
003d:Call winex11.drv.wine_get_gdi_driver(0000002e) ret=7eb3c4d4
003d:Ret winex11.drv.wine_get_gdi_driver() retval=7dd7ace0 ret=7eb3c4d4
003d:Call winex11.drv.CreateDesktopWindow(00010020) ret=7ec6200a
003d:Ret winex11.drv.CreateDesktopWindow() retval=00000001 ret=7ec6200a
003d:Call winex11.drv.wine_get_gdi_driver(0000002e) ret=7eb3c4d4
003d:Ret winex11.drv.wine_get_gdi_driver() retval=7dd7ace0 ret=7eb3c4d4
003d:Call winex11.drv.GetKeyboardLayoutName(00000000) ret=7ec61cc6
003d:trace:seh:raise_exception code=c0000005 flags=0 addr=0xf75bdf80
ip=f75bdf80 tid=003d
003d:trace:seh:raise_exception info[0]=00000001
003d:trace:seh:raise_exception info[1]=00000000
003d:trace:seh:raise_exception eax=00000000 ebx=f7755000 ecx=00000000
edx=00000030 esi=0033f9b4 edi=0033f984
003d:trace:seh:raise_exception ebp=0033f908 esp=0033f660 cs=0023 ds=002b
es=002b fs=0063 gs=006b flags=00210293
003d:trace:seh:call_stack_handlers calling handler at 0x7bc9ed1b code=c0000005
...
Backtrace:
=>0 0xf75bdf80 vsnprintfW+0x546(str=*** invalid address 0x2 ***,
len=0x7fffffff, format="%08x", valist="Ó¸×}HÜÎ{")
[/home/focht/projects/wine/wine.repo/src/libs/wine/string.c:485] in
libwine.so.1 (0x0033f908)
1 0xf75be096 sprintfW+0x38(str=0x0(nil), format="%08x")
[/home/focht/projects/wine/wine.repo/src/libs/wine/string.c:525] in
libwine.so.1 (0x0033f938)
2 0x7dd1b261 X11DRV_GetKeyboardLayoutName+0x57(name=0x0(nil))
[/home/focht/projects/wine/wine.repo/src/dlls/winex11.drv/keyboard.c:1590] in
winex11 (0x0033f978)
3 0x7bc6e63e relay_call+0x39() in ntdll (0x0033f998)
4 0x7dcfa6ad frame_dummy+0xcc() in winex11 (0x0033f9c8)
5 0x7ec61cc6 loaderdrv_GetKeyboardLayoutName+0x18(name=0x0(nil))
[/home/focht/projects/wine/wine.repo/src/dlls/user32/driver.c:618] in user32
(0x0033f9c8)
6 0x7ec77b70 GetKeyboardLayoutNameW+0x25(pwszKLID=0x0(nil))
[/home/focht/projects/wine/wine.repo/src/dlls/user32/input.c:969] in user32
(0x0033f9e8)
7 0x7bc6e63e relay_call+0x39() in ntdll (0x0033fa00)
8 0x7ec33b05 in user32 (+0x3b04) (0x0033fa64)
9 0x00437377 in
44217c15f30538a1fbdf614c9785c9b7Z:\home\focht\Downloads\44217C15F30538A1FBDF614C9785C9B7.exe
(+0x37376) (0x0033fa64)
...
--- snip ---
MSDN:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms646298%28v=vs.85%29.aspx
With 'FALSE' being returned, the application checks the last error code for
0x3e6 ('ERROR_NOACCESS') and bails if not matching.
With that part fixed, the app runs much farther (doesn't fully work yet, but
that could be subject to additional bugs).
$ sha1sum 44217C15F30538A1FBDF614C9785C9B7.exe
64f4d39d57b33e58a3937a23e37889583dce47dc 44217C15F30538A1FBDF614C9785C9B7.exe
$ du -sh 44217C15F30538A1FBDF614C9785C9B7.exe
388K 44217C15F30538A1FBDF614C9785C9B7.exe
$ wine --version
wine-1.7.34
Regards
--
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.
More information about the wine-bugs
mailing list