Alexandre Goujon : kernel32/tests: Add a IOCTL_DVD_READ_STRUCTURE ( DvdCopyrightDescriptor) test.
Module: wine Branch: master Commit: 9fce6a37ecb2a09e14bd3d384132fe3b09c3dcc1 URL: http://source.winehq.org/git/wine.git/?a=commit;h=9fce6a37ecb2a09e14bd3d3841... Author: Alexandre Goujon <ale.goujon(a)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");
participants (1)
-
Alexandre Julliard