Ntdll timer routines did not check for NULL ObjectName in OBJECT_ATTRIBUTES even though kernel32 timer routines did use those for unnamed timers. This made Wine to crash whenever unnamed timers were created. Changelog: Ntdll timer routines must check for NULL timer name. Index: dlls/ntdll/sync.c =================================================================== RCS file: /home/wine/wine/dlls/ntdll/sync.c,v retrieving revision 1.28 diff -u -r1.28 sync.c --- dlls/ntdll/sync.c 20 May 2003 04:00:42 -0000 1.28 +++ dlls/ntdll/sync.c 24 May 2003 06:30:20 -0000 @@ -297,6 +297,7 @@ IN const OBJECT_ATTRIBUTES *oa OPTIONAL, IN TIMER_TYPE timer_type) { + DWORD len = (oa && oa->ObjectName) ? oa->ObjectName->Length : 0; NTSTATUS status; if (timer_type != NotificationTimer && timer_type != SynchronizationTimer) @@ -306,8 +307,7 @@ { req->manual = (timer_type == NotificationTimer) ? TRUE : FALSE; req->inherit = oa && (oa->Attributes & OBJ_INHERIT); - if (oa && oa->ObjectName->Length) - wine_server_add_data( req, oa->ObjectName->Buffer, oa->ObjectName->Length ); + if (len) wine_server_add_data( req, oa->ObjectName->Buffer, len ); status = wine_server_call( req ); *handle = reply->handle; } @@ -324,6 +324,7 @@ IN ACCESS_MASK access, IN const OBJECT_ATTRIBUTES* oa ) { + DWORD len = (oa && oa->ObjectName) ? oa->ObjectName->Length : 0; NTSTATUS status; if (oa && oa->Length >= MAX_PATH * sizeof(WCHAR)) @@ -333,8 +334,7 @@ { req->access = access; req->inherit = oa && (oa->Attributes & OBJ_INHERIT); - if (oa && oa->ObjectName->Length) - wine_server_add_data( req, oa->ObjectName->Buffer, oa->ObjectName->Length ); + if (len) wine_server_add_data( req, oa->ObjectName->Buffer, len ); status = wine_server_call( req ); *handle = reply->handle; } -- Jukka Heinonen <http://www.iki.fi/jhei/>