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