From d50238833bf43f6827afe5157b931242bec73ed5 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Thu, 9 Jul 2009 21:49:04 +0000 Subject: [PATCH] - Fix a bug which was responsible for most audio-related crashes - Found by DosX (Gregor Schneider) - Fix memory leak See issue #4674 for more details. svn path=/trunk/; revision=41835 --- reactos/drivers/ksfilter/ks/topology.c | 5 ++--- reactos/drivers/wdm/audio/sysaudio/control.c | 5 ++++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/reactos/drivers/ksfilter/ks/topology.c b/reactos/drivers/ksfilter/ks/topology.c index 21404d1b34e..a887eab8f90 100644 --- a/reactos/drivers/ksfilter/ks/topology.c +++ b/reactos/drivers/ksfilter/ks/topology.c @@ -19,7 +19,7 @@ KspCreateObjectType( OBJECT_ATTRIBUTES ObjectAttributes; UNICODE_STRING Name; - Name.Length = (wcslen(ObjectType) + 1) * sizeof(WCHAR) + CreateParametersSize; + Name.Length = Name.MaximumLength = (wcslen(ObjectType) + 1) * sizeof(WCHAR) + CreateParametersSize; Name.MaximumLength += sizeof(WCHAR); Name.Buffer = ExAllocatePool(NonPagedPool, Name.MaximumLength); @@ -52,8 +52,7 @@ KspCreateObjectType( NULL, IO_NO_PARAMETER_CHECKING | IO_FORCE_ACCESS_CHECK); - // HACK HACK HACK HACK - //ExFreePool(Name.Buffer); + ExFreePool(Name.Buffer); return Status; } diff --git a/reactos/drivers/wdm/audio/sysaudio/control.c b/reactos/drivers/wdm/audio/sysaudio/control.c index fd1ca41ddb9..2463107b8db 100644 --- a/reactos/drivers/wdm/audio/sysaudio/control.c +++ b/reactos/drivers/wdm/audio/sysaudio/control.c @@ -42,7 +42,7 @@ KspCreateObjectType( OBJECT_ATTRIBUTES ObjectAttributes; UNICODE_STRING Name; - Name.Length = (wcslen(ObjectType) + 1) * sizeof(WCHAR) + CreateParametersSize; + Name.Length = Name.MaximumLength = (wcslen(ObjectType) + 1) * sizeof(WCHAR) + CreateParametersSize; Name.MaximumLength += sizeof(WCHAR); Name.Buffer = ExAllocatePool(NonPagedPool, Name.MaximumLength); @@ -75,6 +75,8 @@ KspCreateObjectType( NULL, IO_NO_PARAMETER_CHECKING | IO_FORCE_ACCESS_CHECK); + ExFreePool(Name.Buffer); + return Status; } @@ -984,6 +986,7 @@ SysAudioHandleProperty( RtlStringFromGUID(&Property->Set, &GuidString); DPRINT1("Unhandeled property Set |%S| Id %u Flags %x\n", GuidString.Buffer, Property->Id, Property->Flags); + DbgBreakPoint(); RtlFreeUnicodeString(&GuidString); return SetIrpIoStatus(Irp, STATUS_UNSUCCESSFUL, 0); }