[MMIXER]
authorJohannes Anderwald <johannes.anderwald@reactos.org>
Tue, 15 Jun 2010 14:04:19 +0000 (14:04 +0000)
committerJohannes Anderwald <johannes.anderwald@reactos.org>
Tue, 15 Jun 2010 14:04:19 +0000 (14:04 +0000)
- Fix buffer overflow
- Dedicated to irc:igorko

svn path=/trunk/; revision=47782

reactos/lib/drivers/sound/mmixer/sup.c

index 90b7c01..e864d1d 100644 (file)
@@ -638,9 +638,16 @@ MMixerGetDeviceName(
     Status = MixerContext->QueryKeyValue(hKey, L"FriendlyName", (PVOID*)&Name, &Length, &Type);
     if (Status == MM_STATUS_SUCCESS)
     {
-        ASSERT(Length < MAXPNAMELEN);
-        wcscpy(MixerInfo->MixCaps.szPname, Name);
+        // copy device name
+        MixerContext->Copy(MixerInfo->MixCaps.szPname, Name, min(wcslen(Name), MAXPNAMELEN-1) * sizeof(WCHAR));
+
+        // make sure its null terminated
+        MixerInfo->MixCaps.szPname[MAXPNAMELEN-1] = L'\0';
+
+        // free device name
         MixerContext->Free(Name);
+
+        // done
         return Status;
     }
 
@@ -651,8 +658,13 @@ MMixerGetDeviceName(
     Status = MixerContext->QueryKeyValue(hKey, L"FriendlyName", (PVOID*)&Name, &Length, &Type);
     if (Status == MM_STATUS_SUCCESS)
     {
-        ASSERT(Length < MAXPNAMELEN);
-        wcscpy(MixerInfo->MixCaps.szPname, Name);
+        // copy device name
+        MixerContext->Copy(MixerInfo->MixCaps.szPname, Name, min(wcslen(Name), MAXPNAMELEN-1) * sizeof(WCHAR));
+
+        // make sure its null terminated
+        MixerInfo->MixCaps.szPname[MAXPNAMELEN-1] = L'\0';
+
+        // free device name
         MixerContext->Free(Name);
     }