static void test_SecDbExecWithSql(SecDbConnectionRef dbconn, CFStringRef sql CF_CONSUMED, const char *directive, const char *reason, const char *file, unsigned line) { CFErrorRef execError = NULL; bool is_ok = !!(SecDbExec(dbconn, sql, &execError)); dispatch_sync(count_queue, ^{ test_ok(is_ok, test_create_description("exec %@: %@", sql, execError), directive, reason, file, line, NULL); });
static void nosha1(void) { __block int iteration = 0; __block CFErrorRef error = NULL; SOSTestDeviceListTestSync("nosha1", test_directive, test_reason, 0, true, ^bool(SOSTestDeviceRef source, SOSTestDeviceRef dest) { iteration++; // Add 10 items in first 10 sync messages if (iteration <= 6) { CFStringRef account = CFStringCreateWithFormat(kCFAllocatorDefault, NULL, CFSTR("item%d"), iteration); SOSTestDeviceAddGenericItem(source, account, CFSTR("nosha1")); CFReleaseSafe(account); // Corrupt the 4th item added if (iteration == 4) { ok(SecDbPerformWrite(source->db, &error, ^(SecDbConnectionRef dbconn) { ok(SecDbTransaction(dbconn, kSecDbExclusiveTransactionType, &error, ^(bool *commit) { ok(SecDbExec(dbconn, CFSTR("UPDATE genp SET sha1=X'0000000000000000000000000000000000000000' WHERE rowid=5;"), &error), "Corrupting rowid 5 by zeroing sha1: %@", error); CFReleaseNull(error); }), "SecDbTransaction: %@", error);