Erich E. Hoover : ntdll: Fix IOCTL_DVD_READ_STRUCTURE expected output size.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Jun 15 08:49:08 CDT 2015


Module: wine
Branch: master
Commit: cdefae9ef229f91b31e07f6e860a26054235787a
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=cdefae9ef229f91b31e07f6e860a26054235787a

Author: Erich E. Hoover <erich.e.hoover at wine-staging.com>
Date:   Sun Jun 14 15:13:40 2015 -0600

ntdll: Fix IOCTL_DVD_READ_STRUCTURE expected output size.

---

 dlls/ntdll/cdrom.c | 24 +++++++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

diff --git a/dlls/ntdll/cdrom.c b/dlls/ntdll/cdrom.c
index 25a3fde..4407277 100644
--- a/dlls/ntdll/cdrom.c
+++ b/dlls/ntdll/cdrom.c
@@ -2491,6 +2491,28 @@ static NTSTATUS DVD_GetRegion(int fd, PDVD_REGION region)
 #endif
 }
 
+static DWORD DVD_ReadStructureSize(const DVD_READ_STRUCTURE *structure, DWORD size)
+{
+    if (!structure || size != sizeof(DVD_READ_STRUCTURE))
+        return 0;
+
+    switch (structure->Format)
+    {
+    case DvdPhysicalDescriptor:
+        return sizeof(DVD_LAYER_DESCRIPTOR);
+    case DvdCopyrightDescriptor:
+        return sizeof(DVD_COPYRIGHT_DESCRIPTOR);
+    case DvdDiskKeyDescriptor:
+        return sizeof(DVD_DISK_KEY_DESCRIPTOR);
+    case DvdBCADescriptor:
+        return sizeof(DVD_BCA_DESCRIPTOR);
+    case DvdManufacturerDescriptor:
+        return sizeof(DVD_MANUFACTURER_DESCRIPTOR);
+    default:
+        return 0;
+    }
+}
+
 /******************************************************************
  *		DVD_ReadStructure
  *
@@ -3097,7 +3119,7 @@ NTSTATUS CDROM_DeviceIoControl(HANDLE hDevice,
         }
         break;
     case IOCTL_DVD_READ_STRUCTURE:
-        sz = sizeof(DVD_LAYER_DESCRIPTOR);
+        sz = DVD_ReadStructureSize(lpInBuffer, nInBufferSize);
         if (lpInBuffer == NULL || nInBufferSize != sizeof(DVD_READ_STRUCTURE)) status = STATUS_INVALID_PARAMETER;
         else if (nOutBufferSize < sz || !lpOutBuffer) status = STATUS_BUFFER_TOO_SMALL;
         else




More information about the wine-cvs mailing list