forked from Mirrors/wine-wine
setupapi: Add magic bytes to struct file_queue and validate them in SetupCloseFileQueue().
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=12332
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit c65d98065c
)
Conflicts:
dlls/setupapi/tests/install.c
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
oldstable
parent
7feef68ff1
commit
91fdecbd95
|
@ -70,12 +70,14 @@ struct file_op_queue
|
|||
|
||||
struct file_queue
|
||||
{
|
||||
DWORD magic;
|
||||
struct file_op_queue copy_queue;
|
||||
struct file_op_queue delete_queue;
|
||||
struct file_op_queue rename_queue;
|
||||
DWORD flags;
|
||||
};
|
||||
|
||||
#define FILE_QUEUE_MAGIC 0x21514653
|
||||
|
||||
/* append a file operation to a queue */
|
||||
static inline void queue_file_op( struct file_op_queue *queue, struct file_op *op )
|
||||
|
@ -413,6 +415,7 @@ HSPFILEQ WINAPI SetupOpenFileQueue(void)
|
|||
|
||||
if (!(queue = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*queue))))
|
||||
return INVALID_HANDLE_VALUE;
|
||||
queue->magic = FILE_QUEUE_MAGIC;
|
||||
return queue;
|
||||
}
|
||||
|
||||
|
@ -424,6 +427,14 @@ BOOL WINAPI SetupCloseFileQueue( HSPFILEQ handle )
|
|||
{
|
||||
struct file_queue *queue = handle;
|
||||
|
||||
/* Windows XP DDK installer passes the handle returned from
|
||||
* SetupInitDefaultQueueCallback() to this function. */
|
||||
if (queue->magic != FILE_QUEUE_MAGIC)
|
||||
{
|
||||
SetLastError(ERROR_INVALID_HANDLE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
free_file_op_queue( &queue->copy_queue );
|
||||
free_file_op_queue( &queue->rename_queue );
|
||||
free_file_op_queue( &queue->delete_queue );
|
||||
|
|
|
@ -761,6 +761,21 @@ static void test_dirid(void)
|
|||
check_dirid(40, expected);
|
||||
}
|
||||
|
||||
static void test_close_queue(void)
|
||||
{
|
||||
void *context;
|
||||
BOOL ret;
|
||||
|
||||
context = SetupInitDefaultQueueCallback(NULL);
|
||||
ok(!!context, "Failed to create callback context, error %#x.\n", GetLastError());
|
||||
|
||||
ret = SetupCloseFileQueue(context);
|
||||
ok(!ret, "Expected failure.\n");
|
||||
ok(GetLastError() == ERROR_INVALID_HANDLE, "Got unexpected error %u.\n", GetLastError());
|
||||
|
||||
SetupTermDefaultQueueCallback(context);
|
||||
}
|
||||
|
||||
START_TEST(install)
|
||||
{
|
||||
char temp_path[MAX_PATH], prev_path[MAX_PATH];
|
||||
|
@ -785,6 +800,7 @@ START_TEST(install)
|
|||
test_install_svc_from();
|
||||
test_driver_install();
|
||||
test_dirid();
|
||||
test_close_queue();
|
||||
|
||||
UnhookWindowsHookEx(hhook);
|
||||
|
||||
|
|
Loading…
Reference in New Issue