[Bug 2300] Galactic Civilizations demo dies with unhandled exception

Wine Bugs wine-bugs at winehq.org
Fri Jun 25 20:00:19 CDT 2004


http://bugs.winehq.org/show_bug.cgi?id=2300





------- Additional Comments From mike at tashcorp.net  2004-25-06 20:00 -------
As posted to wine-devel: 
 
After sucking it up and realizing I'd have to learn how to navigate winedbg, 
 I started playing around with the Galactic Civilizations unhandled exception.  
Some documentation and a few trips through winedbg later, it appears that  
Gal Civ is throwing a divide-by-zero 
-----------<snip>--------------- 
First chance exception: divide by zero in 32-bit code (0x40f2cda8) 
-----------<snip>--------------- 
 
I did a 'bt' next: 
-----------<snip>--------------- 
=>1 0x40f2cda8 send_mouse_event+0xc8(hwnd=0x10024, flags=0x8001, 
posX=0x1fb0000, posY=0x1df, data=0x0, time=0xef3d) [mouse.c:135] in x11drv 
(0x406cfbb0) 
  2 0x40f2e010 X11DRV_MotionNotify+0x60(hwnd=0x10024, event=0x406cfc4c) 
[mouse.c:613] in x11drv (0x406cfbdc) 
  3 0x40f24e90 .L79+0xa in x11drv (0x406cfc3c) 
  ... stuff ... 
-----------<snip>--------------- 
 
and then did an 'info local' and got: 
-----------<snip>--------------- 
send_mouse_event: 
        struct HWND__* hwnd = 0x00010024 (parameter) 
        long unsigned int flags = 0x00008001 (parameter) 
        long unsigned int posX = 0x01fb0000 (parameter) 
        long unsigned int posY = 0x000001df (parameter) 
        long unsigned int data = 0x00000000 (parameter) 
        long unsigned int time = 0x0000ef3d (parameter) 
        unsigned int state = 0x0000004c (local in register ECX) 
        unsigned int state = 0x0000004c (local in register ECX) 
        struct HWND__* hwnd = 0x01faffff (local in register EAX) 
        long unsigned int data = 0x01faffff (local in register EAX) 
        long unsigned int time = 0x0000ef3d (local in register EDI) 
        struct tagINPUT input = 0x40f61028 (local) 
        int width = 0x00000000 (local in register ESI) 
        int height = 0x00000000 (local) 
-----------<snip>--------------- 
 
After digging around in dlls/x11drv/mouse.c (see the bt output), I found: 
-----------<snip>--------------- 
        int width  = GetSystemMetrics( SM_CXSCREEN ); 
        int height = GetSystemMetrics( SM_CYSCREEN ); 
        /* Relative mouse movements seem not to be scaled as absolute ones */ 
        posX = (((long)posX << 16) + width-1)  / width; 
        posY = (((long)posY << 16) + height-1) / height; 
-----------<snip>--------------- 
 
The posX and poxY calculations are the only divides in the send_mouse_event  
function (pointed to by the bt as the stack location when the divide-by-zero  
occurred). The 'info local' confirms that width and height are indeed 0. My  
problem is that I do not think GetSystemMetrics should be returning 0. The 
display is quite chorked up by the time the unhandled exception occurs, so 
I'm pretty sure something bad has already happened; I just don't know what. 

-- 
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.



More information about the wine-bugs mailing list