http://bugs.winehq.org/show_bug.cgi?id=10799
--- Comment #16 from Mateus César Gröess mateuscg@gmail.com 2007-12-19 19:22:39 --- I don't want to disappoint you, but the problem is still present. I applied your first commited patch and after the second patch, against version 0.9.51. Based on you changes, I made some additions using the old printf debug method. Here is the patch I tried:
--- driver.c-orig 2007-12-17 15:28:47.000000000 -0200 +++ driver.c 2007-12-17 16:57:11.000000000 -0200 @@ -413,19 +413,29 @@ DEVMODEW *dmW; WORD dmW_size, dmA_size;
+ printf("dmA value: %X\n", dmA); + printf("dmA->dmSize value: %d\n", dmA->dmSize); + printf("sizeof(DEVMODEA) value: %d\n", sizeof(DEVMODEA)); dmA_size = dmA->dmSize; if (dmA_size > sizeof(DEVMODEA)) dmA_size = sizeof(DEVMODEA);
+ printf("dmA_size 2 value: %d\n", dmA_size); dmW_size = dmA_size + CCHDEVICENAME; + printf("dmW_size value: %d\n", dmW_size); if (dmA_size >= FIELD_OFFSET(DEVMODEA, dmFormName) + CCHFORMNAME) dmW_size += CCHFORMNAME; + printf("dmW_size 2 value: %d\n", dmW_size);
dmW = HeapAlloc(GetProcessHeap(), 0, dmW_size + dmA->dmDriverExtra); if (!dmW) return NULL; + printf("dmW value: %X\n", dmW);
MultiByteToWideChar(CP_ACP, 0, (const char*) dmA->dmDeviceName, CCHDEVICENAME, dmW->dmDeviceName, CCHDEVICENAME); + printf("dmW->dmSpecVersion value: %d\n", dmW->dmSpecVersion); + printf("dmA->dmSpecVersion value: %d\n", dmA->dmSpecVersion); + printf("dmA_size value: %d\n", dmA_size); /* copy slightly more, to avoid long computations */ memcpy(&dmW->dmSpecVersion, &dmA->dmSpecVersion, dmA_size - CCHDEVICENAME);
The results:
dmA value: AC1C3C dmA->dmSize value: 0 sizeof(DEVMODEA) value: 156 dmA_size 2 value: 0 dmW_size value: 32 dmW_size 2 value: 32 dmW value: 1410B8 dmW->dmSpecVersion value: 74 dmA->dmSpecVersion value: 0 dmA_size value: 0 wine: Unhandled page fault on read access to 0x00acc000 at address 0xb7ce455f (thread 001b), starting debugger... <snip...> Backtrace: =>1 0xb7ce455f memcpy+0x2f() in libc.so.6 (0x0031a370) 2 0x7e99399b GdiConvertToDevmodeW+0x1d5(dmA=0xac1c3c) [/tmp/tgz/wine-0.9.51/dlls/gdi32/driver.c:440] in gdi32 (0x0031a3a0) 3 0x7eab2cc5 ChangeDisplaySettingsExA+0x45(devname=0x0, devmode=0xac1c3c, hwnd=0x0, flags=0x0, lparam=0x0) [/tmp/tgz/wine-0.9.51/dlls/user32/sysparams.c:3001] in user32 (0x0031a3e0) 4 0x7eab2c45 ChangeDisplaySettingsA+0x27(devmode=0xac1c3c, flags=0x0) [/tmp/tgz/wine-0.9.51/dlls/user32/sysparams.c:2972] in user32 (0x0031a410) 5 0x0042a433 in myst (+0x2a433) (0x0031a428) 6 0x0042ab3f in myst (+0x2ab3f) (0x0031a490)