From 9540d762ad67cedb0c32510b2da2061bff975758 Mon Sep 17 00:00:00 2001 From: James Hawkins Date: Mon, 2 Mar 2009 02:34:32 -0800 Subject: [PATCH] msi: Handle reading from a NULL stream. --- dlls/msi/record.c | 6 ++++++ dlls/msi/tests/db.c | 7 ++----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/dlls/msi/record.c b/dlls/msi/record.c index 2b7131a8d2..d484cb888e 100644 --- a/dlls/msi/record.c +++ b/dlls/msi/record.c @@ -765,6 +765,12 @@ UINT MSI_RecordReadStream(MSIRECORD *rec, UINT iField, char *buf, LPDWORD sz) if( iField > rec->count) return ERROR_INVALID_PARAMETER; + if ( rec->fields[iField].type == MSIFIELD_NULL ) + { + *sz = 0; + return ERROR_INVALID_DATA; + } + if( rec->fields[iField].type != MSIFIELD_STREAM ) return ERROR_INVALID_DATATYPE; diff --git a/dlls/msi/tests/db.c b/dlls/msi/tests/db.c index e1e9fb747e..b2c7d06c88 100644 --- a/dlls/msi/tests/db.c +++ b/dlls/msi/tests/db.c @@ -6077,12 +6077,9 @@ static void test_storages_table(void) size = MAX_PATH; lstrcpyA(buf, "apple"); r = MsiRecordReadStream(hrec, 2, buf, &size); + ok(r == ERROR_INVALID_DATA, "Expected ERROR_INVALID_DATA, got %d\n", r); ok(!lstrcmp(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - todo_wine - { - ok(r == ERROR_INVALID_DATA, "Expected ERROR_INVALID_DATA, got %d\n", r); - ok(size == 0, "Expected 0, got %d\n", size); - } + ok(size == 0, "Expected 0, got %d\n", size); MsiCloseHandle(hrec);