Commit 2f8c2a8d authored by James Hawkins's avatar James Hawkins Committed by Alexandre Julliard

msi: Make sure the view being updated is the same view the record was fetched from.

parent e872681a
...@@ -377,7 +377,10 @@ UINT MSI_ViewFetch(MSIQUERY *query, MSIRECORD **prec) ...@@ -377,7 +377,10 @@ UINT MSI_ViewFetch(MSIQUERY *query, MSIRECORD **prec)
r = msi_view_get_row(query->db, view, query->row, prec); r = msi_view_get_row(query->db, view, query->row, prec);
if (r == ERROR_SUCCESS) if (r == ERROR_SUCCESS)
{
query->row ++; query->row ++;
MSI_RecordSetInteger(*prec, 0, (int)query);
}
return r; return r;
} }
...@@ -597,6 +600,9 @@ UINT MSI_ViewModify( MSIQUERY *query, MSIMODIFY mode, MSIRECORD *rec ) ...@@ -597,6 +600,9 @@ UINT MSI_ViewModify( MSIQUERY *query, MSIMODIFY mode, MSIRECORD *rec )
if ( !view || !view->ops->modify) if ( !view || !view->ops->modify)
return ERROR_FUNCTION_FAILED; return ERROR_FUNCTION_FAILED;
if ( mode == MSIMODIFY_UPDATE && MSI_RecordGetInteger( rec, 0 ) != (int)query )
return ERROR_FUNCTION_FAILED;
r = view->ops->modify( view, mode, rec, query->row ); r = view->ops->modify( view, mode, rec, query->row );
if (mode == MSIMODIFY_DELETE && r == ERROR_SUCCESS) if (mode == MSIMODIFY_DELETE && r == ERROR_SUCCESS)
query->row--; query->row--;
......
...@@ -321,10 +321,8 @@ static void test_msiinsert(void) ...@@ -321,10 +321,8 @@ static void test_msiinsert(void)
r = MsiRecordGetFieldCount(hrec); r = MsiRecordGetFieldCount(hrec);
ok(r == 3, "record count wrong\n"); ok(r == 3, "record count wrong\n");
todo_wine {
r = MsiRecordIsNull(hrec, 0); r = MsiRecordIsNull(hrec, 0);
ok(r == FALSE, "field 0 not null\n"); ok(r == FALSE, "field 0 not null\n");
}
r = MsiRecordGetInteger(hrec, 1); r = MsiRecordGetInteger(hrec, 1);
ok(r == 1, "field 1 contents wrong\n"); ok(r == 1, "field 1 contents wrong\n");
...@@ -903,10 +901,7 @@ static void test_viewmodify(void) ...@@ -903,10 +901,7 @@ static void test_viewmodify(void)
ok(r == ERROR_SUCCESS, "failed to set string\n"); ok(r == ERROR_SUCCESS, "failed to set string\n");
r = MsiViewModify(hview, MSIMODIFY_UPDATE, hrec); r = MsiViewModify(hview, MSIMODIFY_UPDATE, hrec);
todo_wine ok(r == ERROR_FUNCTION_FAILED, "MsiViewModify failed\n");
{
ok(r == ERROR_FUNCTION_FAILED, "MsiViewModify failed\n");
}
r = MsiCloseHandle(hrec); r = MsiCloseHandle(hrec);
ok(r == ERROR_SUCCESS, "failed to close record\n"); ok(r == ERROR_SUCCESS, "failed to close record\n");
......
...@@ -569,16 +569,10 @@ static void test_fieldzero(void) ...@@ -569,16 +569,10 @@ static void test_fieldzero(void)
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
r = MsiRecordGetInteger(rec, 0); r = MsiRecordGetInteger(rec, 0);
todo_wine ok(r != MSI_NULL_INTEGER && r != 0, "Expected non-NULL value, got %d\n", r);
{
ok(r != MSI_NULL_INTEGER && r != 0, "Expected non-NULL value, got %d\n", r);
}
r = MsiRecordIsNull(rec, 0); r = MsiRecordIsNull(rec, 0);
todo_wine ok(r == FALSE, "Expected FALSE, got %d\n", r);
{
ok(r == FALSE, "Expected FALSE, got %d\n", r);
}
MsiCloseHandle(hdb); MsiCloseHandle(hdb);
DeleteFileA(msifile); DeleteFileA(msifile);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment