diff --git a/dlls/msi/action.c b/dlls/msi/action.c index abee14c2a25..a5a1e336955 100644 --- a/dlls/msi/action.c +++ b/dlls/msi/action.c @@ -276,7 +276,7 @@ static int parse_prop( const WCHAR *str, WCHAR *value, int *quotes ) break; case ' ': state = state_whitespace; - if (!count || !len) goto done; + if (!count) goto done; in_quotes = 1; break; default: @@ -317,7 +317,7 @@ UINT msi_parse_command_line( MSIPACKAGE *package, LPCWSTR szCommandLine, BOOL preserve_case ) { LPCWSTR ptr, ptr2; - int quotes; + int num_quotes; DWORD len; WCHAR *prop, *val; UINT r; @@ -345,10 +345,10 @@ UINT msi_parse_command_line( MSIPACKAGE *package, LPCWSTR szCommandLine, ptr2++; while (*ptr2 == ' ') ptr2++; - quotes = 0; + num_quotes = 0; val = msi_alloc( (strlenW( ptr2 ) + 1) * sizeof(WCHAR) ); - len = parse_prop( ptr2, val, "es ); - if (quotes % 2) + len = parse_prop( ptr2, val, &num_quotes ); + if (num_quotes % 2) { WARN("unbalanced quotes\n"); msi_free( val ); diff --git a/dlls/msi/tests/install.c b/dlls/msi/tests/install.c index 9e8535a6adf..1f5ab9c690f 100644 --- a/dlls/msi/tests/install.c +++ b/dlls/msi/tests/install.c @@ -6282,6 +6282,10 @@ static void test_command_line_parsing(void) r = MsiInstallProductA(msifile, cmd); ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); + cmd = "P=\" \""; + r = MsiInstallProductA(msifile, cmd); + ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); + cmd = "P=one"; r = MsiInstallProductA(msifile, cmd); ok(r == ERROR_INSTALL_FAILURE, "Expected ERROR_INSTALL_FAILURE, got %u\n", r);