fixed ObpCaptureObjectAttributes() so it doesn't copy the object name if probing previously failed Modified: trunk/reactos/ntoskrnl/ob/object.c _____
Modified: trunk/reactos/ntoskrnl/ob/object.c --- trunk/reactos/ntoskrnl/ob/object.c 2005-01-21 10:33:30 UTC (rev 13180) +++ trunk/reactos/ntoskrnl/ob/object.c 2005-01-21 11:14:41 UTC (rev 13181) @@ -178,37 +178,41 @@
} _SEH_END;
- if(OriginalCopy.Length > 0) + if(NT_SUCCESS(Status)) { - ObjectName->MaximumLength = OriginalCopy.Length + sizeof(WCHAR); - ObjectName->Buffer = ExAllocatePool(NonPagedPool, - ObjectName->MaximumLength); - if(ObjectName->Buffer != NULL) + if(OriginalCopy.Length > 0) { - _SEH_TRY + ObjectName->MaximumLength = OriginalCopy.Length + sizeof(WCHAR); + ObjectName->Buffer = ExAllocatePool(NonPagedPool, + ObjectName->MaximumLength); + if(ObjectName->Buffer != NULL) { - /* no need to probe OriginalCopy.Buffer again, we already did that - when capturing the UNICODE_STRING structure itself */ - RtlCopyMemory(ObjectName->Buffer, OriginalCopy.Buffer, OriginalCopy.Length); - ObjectName->Buffer[OriginalCopy.Length / sizeof(WCHAR)] = L'\0'; + _SEH_TRY + { + /* no need to probe OriginalCopy.Buffer again, we already did that + when capturing the UNICODE_STRING structure itself */ + RtlCopyMemory(ObjectName->Buffer, OriginalCopy.Buffer, OriginalCopy.Length); + ObjectName->Buffer[OriginalCopy.Length / sizeof(WCHAR)] = L'\0'; + } + _SEH_HANDLE + { + Status = _SEH_GetExceptionCode(); + } + _SEH_END; } - _SEH_HANDLE + else { - Status = _SEH_GetExceptionCode(); + Status = STATUS_INSUFFICIENT_RESOURCES; } - _SEH_END; } - else + else if(AttributesCopy.RootDirectory != NULL /* && OriginalCopy.Length == 0 */) { - Status = STATUS_INSUFFICIENT_RESOURCES; + /* if the caller specified a root directory, there must be an object name! */ + Status = STATUS_OBJECT_NAME_INVALID; } } - else if(AttributesCopy.RootDirectory != NULL /* && OriginalCopy.Length == 0 */) - { - /* if the caller specified a root directory, there must be an object name! */ - Status = STATUS_OBJECT_NAME_INVALID; - }
+ /* handle failure */ if(!NT_SUCCESS(Status)) { failallocatedcleanup: