[PATCH 4/5] kernel32/tests: Add a IOCTL_DVD_READ_STRUCTURE (DvdCopyrightDescriptor) test (try 2)
Alexandre Goujon
ale.goujon at gmail.com
Sun Jun 17 05:11:27 CDT 2012
This one superseeds path #87005
---
dlls/kernel32/tests/volume.c | 21 +++++++++++++++++++++
dlls/ntdll/cdrom.c | 2 +-
2 files changed, 22 insertions(+), 1 deletion(-)
diff --git a/dlls/kernel32/tests/volume.c b/dlls/kernel32/tests/volume.c
index cf402ad..45bac31 100644
--- a/dlls/kernel32/tests/volume.c
+++ b/dlls/kernel32/tests/volume.c
@@ -749,6 +749,7 @@ static void test_dvd_read_structure(HANDLE handle)
DVD_READ_STRUCTURE dvdReadStructure;
DVD_LAYER_DESCRIPTOR dvdLayerDescriptor;
struct COMPLETE_DVD_LAYER_DESCRIPTOR completeDvdLayerDescriptor;
+ DVD_COPYRIGHT_DESCRIPTOR dvdCopyrightDescriptor;
dvdReadStructure.BlockByteOffset.QuadPart = 0;
dvdReadStructure.SessionId = 0;
@@ -818,6 +819,26 @@ static void test_dvd_read_structure(HANDLE handle)
ok( (!ret && GetLastError() == ERROR_INVALID_PARAMETER),
"IOCTL_DVD_READ_STRUCTURE should have failed\n");
}
+
+
+ /* DvdCopyrightDescriptor */
+ dvdReadStructure.Format = 1;
+
+ SetLastError(0xdeadbeef);
+
+ /* Strangely, with NULL lpOutBuffer, last error is insufficient buffer, not invalid parameter as we could expect */
+ ret = DeviceIoControl(handle, IOCTL_DVD_READ_STRUCTURE, &dvdReadStructure, sizeof(DVD_READ_STRUCTURE),
+ NULL, sizeof(DVD_COPYRIGHT_DESCRIPTOR), &nbBytes, NULL);
+ ok(!ret && GetLastError() == ERROR_INSUFFICIENT_BUFFER, "IOCTL_DVD_READ_STRUCTURE should have failed %d %u\n", ret, GetLastError());
+
+ for(i=0; i<sizeof(DVD_COPYRIGHT_DESCRIPTOR); i++)
+ {
+ SetLastError(0xdeadbeef);
+
+ ret = DeviceIoControl(handle, IOCTL_DVD_READ_STRUCTURE, &dvdReadStructure, sizeof(DVD_READ_STRUCTURE),
+ &dvdCopyrightDescriptor, i, &nbBytes, NULL);
+ ok(!ret && GetLastError() == ERROR_INSUFFICIENT_BUFFER, "IOCTL_DVD_READ_STRUCTURE should have failed %d %u\n", ret, GetLastError());
+ }
}
static void test_cdrom_ioctl(void)
diff --git a/dlls/ntdll/cdrom.c b/dlls/ntdll/cdrom.c
index 72157eb..78e4abb 100644
--- a/dlls/ntdll/cdrom.c
+++ b/dlls/ntdll/cdrom.c
@@ -3086,7 +3086,7 @@ NTSTATUS CDROM_DeviceIoControl(HANDLE hDevice,
case IOCTL_DVD_READ_STRUCTURE:
sz = sizeof(DVD_LAYER_DESCRIPTOR);
if (lpInBuffer == NULL || nInBufferSize != sizeof(DVD_READ_STRUCTURE)) status = STATUS_INVALID_PARAMETER;
- else if (nOutBufferSize < sz) status = STATUS_BUFFER_TOO_SMALL;
+ else if (nOutBufferSize < sz || !lpOutBuffer) status = STATUS_BUFFER_TOO_SMALL;
else
{
TRACE("doing DVD_READ_STRUCTURE\n");
--
1.7.9.5
More information about the wine-patches
mailing list