Module: wine Branch: master Commit: 3e56d78f2eb38b186abaac482c009cef8c4222e6 URL: http://source.winehq.org/git/wine.git/?a=commit;h=3e56d78f2eb38b186abaac482c...
Author: James Hawkins truiken@gmail.com Date: Fri Jun 29 14:12:44 2007 -0700
msi: Validate MsiSourceListGetInfo parameters.
---
dlls/msi/source.c | 14 ++++++++++++- dlls/msi/tests/source.c | 50 +++++++++------------------------------------- 2 files changed, 23 insertions(+), 41 deletions(-)
diff --git a/dlls/msi/source.c b/dlls/msi/source.c index 49b7e4e..3c73351 100644 --- a/dlls/msi/source.c +++ b/dlls/msi/source.c @@ -214,11 +214,23 @@ UINT WINAPI MsiSourceListGetInfoW( LPCWSTR szProduct, LPCWSTR szUserSid,
TRACE("%s %s\n", debugstr_w(szProduct), debugstr_w(szProperty));
- if (!szProduct || lstrlenW(szProduct) > 39) + if (!szProduct || !*szProduct) + return ERROR_INVALID_PARAMETER; + + if (lstrlenW(szProduct) != GUID_SIZE - 1 || + (szProduct[0] != '{' && szProduct[GUID_SIZE - 2] != '}')) return ERROR_INVALID_PARAMETER;
if (szValue && !pcchValue) return ERROR_INVALID_PARAMETER; + + if (dwContext != MSIINSTALLCONTEXT_USERMANAGED && + dwContext != MSIINSTALLCONTEXT_USERUNMANAGED && + dwContext != MSIINSTALLCONTEXT_MACHINE) + return ERROR_INVALID_PARAMETER; + + if (!szProperty) + return ERROR_INVALID_PARAMETER;
if (dwOptions == MSICODE_PATCH) { diff --git a/dlls/msi/tests/source.c b/dlls/msi/tests/source.c index 53f382a..306a3b4 100644 --- a/dlls/msi/tests/source.c +++ b/dlls/msi/tests/source.c @@ -118,34 +118,22 @@ static void test_MsiSourceListGetInfo(void) /* empty szProductCodeOrPatchCode */ r = MsiSourceListGetInfoA("", usersid, MSIINSTALLCONTEXT_USERUNMANAGED, MSICODE_PRODUCT, INSTALLPROPERTY_PACKAGENAME, NULL, NULL); - todo_wine - { - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - } + ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r);
/* garbage szProductCodeOrPatchCode */ r = MsiSourceListGetInfoA("garbage", usersid, MSIINSTALLCONTEXT_USERUNMANAGED, MSICODE_PRODUCT, INSTALLPROPERTY_PACKAGENAME, NULL, NULL); - todo_wine - { - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - } + ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r);
/* szProductCodeOrPatchCode */ r = MsiSourceListGetInfoA("garbage", usersid, MSIINSTALLCONTEXT_USERUNMANAGED, MSICODE_PRODUCT, INSTALLPROPERTY_PACKAGENAME, NULL, NULL); - todo_wine - { - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - } + ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r);
/* guid without brackets */ r = MsiSourceListGetInfoA("51CD2AD5-0482-4C46-8DDD-0ED1022AA1AA", usersid, MSIINSTALLCONTEXT_USERUNMANAGED, MSICODE_PRODUCT, INSTALLPROPERTY_PACKAGENAME, NULL, NULL); - todo_wine - { - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - } + ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r);
/* guid with brackets */ r = MsiSourceListGetInfoA("{51CD2AD5-0482-4C46-8DDD-0ED1022AA1AA}", usersid, MSIINSTALLCONTEXT_USERUNMANAGED, @@ -155,42 +143,27 @@ static void test_MsiSourceListGetInfo(void) /* same length as guid, but random */ r = MsiSourceListGetInfoA("ADKD-2KSDFF2-DKK1KNFJASD9GLKWME-1I3KAD", usersid, MSIINSTALLCONTEXT_USERUNMANAGED, MSICODE_PRODUCT, INSTALLPROPERTY_PACKAGENAME, NULL, NULL); - todo_wine - { - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - } + ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r);
/* invalid context */ r = MsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_NONE, MSICODE_PRODUCT, INSTALLPROPERTY_PACKAGENAME, NULL, NULL); - todo_wine - { - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - } + ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r);
/* another invalid context */ r = MsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_ALLUSERMANAGED, MSICODE_PRODUCT, INSTALLPROPERTY_PACKAGENAME, NULL, NULL); - todo_wine - { - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - } + ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r);
/* yet another invalid context */ r = MsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_ALL, MSICODE_PRODUCT, INSTALLPROPERTY_PACKAGENAME, NULL, NULL); - todo_wine - { - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - } + ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r);
/* mix two valid contexts */ r = MsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERMANAGED | MSIINSTALLCONTEXT_USERUNMANAGED, MSICODE_PRODUCT, INSTALLPROPERTY_PACKAGENAME, NULL, NULL); - todo_wine - { - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - } + ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r);
/* invalid option */ r = MsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, @@ -200,10 +173,7 @@ static void test_MsiSourceListGetInfo(void) /* NULL property */ r = MsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, MSICODE_PRODUCT, NULL, NULL, NULL); - todo_wine - { - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - } + ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r);
/* empty property */ r = MsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED,