diff --git a/dlls/msi/insert.c b/dlls/msi/insert.c index eb659047148..2b0f68a70ca 100644 --- a/dlls/msi/insert.c +++ b/dlls/msi/insert.c @@ -234,6 +234,14 @@ static const MSIVIEWOPS insert_ops = INSERT_find_matching_rows }; +static UINT count_column_info( column_info *ci ) +{ + UINT n = 0; + for ( ; ci; ci = ci->next ) + n++; + return n; +} + UINT INSERT_CreateView( MSIDATABASE *db, MSIVIEW **view, LPWSTR table, column_info *columns, column_info *values, BOOL temp ) { @@ -243,6 +251,10 @@ UINT INSERT_CreateView( MSIDATABASE *db, MSIVIEW **view, LPWSTR table, TRACE("%p\n", iv ); + /* there should be one value for each column */ + if ( count_column_info( columns ) != count_column_info(values) ) + return ERROR_BAD_QUERY_SYNTAX; + r = TABLE_CreateView( db, table, &tv ); if( r != ERROR_SUCCESS ) return r; @@ -254,7 +266,7 @@ UINT INSERT_CreateView( MSIDATABASE *db, MSIVIEW **view, LPWSTR table, tv->ops->delete( tv ); return r; } - + iv = msi_alloc_zero( sizeof *iv ); if( !iv ) return ERROR_FUNCTION_FAILED; diff --git a/dlls/msi/tests/db.c b/dlls/msi/tests/db.c index a35b685e987..b61e643b9d9 100644 --- a/dlls/msi/tests/db.c +++ b/dlls/msi/tests/db.c @@ -162,17 +162,12 @@ static void test_msiinsert(void) r = do_query(hdb, query, &hrec); ok(r == ERROR_NO_MORE_ITEMS, "MsiViewFetch failed\n"); - todo_wine { /* now try a few bad INSERT xqueries */ query = "INSERT INTO `phone` ( `id`, `name`, `number` )" "VALUES(?, ?)"; r = MsiDatabaseOpenView(hdb, query, &hview); ok(r == ERROR_BAD_QUERY_SYNTAX, "MsiDatabaseOpenView failed\n"); - if (r == ERROR_SUCCESS) - r = MsiCloseHandle(hview); - } - /* construct a record to insert */ hrec = MsiCreateRecord(4); r = MsiRecordSetInteger(hrec, 1, 2);