Alexandre Goujon : kernel32/tests: Add a IOCTL_DVD_READ_STRUCTURE ( DvdCopyrightDescriptor) test.
Alexandre Julliard
julliard at winehq.org
Thu Jul 12 18:00:34 CDT 2012
Module: wine
Branch: master
Commit: 9fce6a37ecb2a09e14bd3d384132fe3b09c3dcc1
URL: http://source.winehq.org/git/wine.git/?a=commit;h=9fce6a37ecb2a09e14bd3d384132fe3b09c3dcc1
Author: Alexandre Goujon <ale.goujon at gmail.com>
Date: Wed Jul 11 22:26:51 2012 +0200
kernel32/tests: Add a IOCTL_DVD_READ_STRUCTURE (DvdCopyrightDescriptor) test.
---
dlls/kernel32/tests/volume.c | 21 +++++++++++++++++++++
dlls/ntdll/cdrom.c | 2 +-
2 files changed, 22 insertions(+), 1 deletions(-)
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 a58701e..8374761 100644
--- a/dlls/ntdll/cdrom.c
+++ b/dlls/ntdll/cdrom.c
@@ -3083,7 +3083,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");
More information about the wine-cvs
mailing list