Reject failed topology writes and malformed stored signatures

This commit is contained in:
evgeny committed 2026-10-24 14:01:37 +02:00
1 parent 5c4207c145
commit 99608de811
2 files changed
+42 -12

No files matched your search

+16
View File
@@ -74,6 +74,7 @@ static void test_verified_write(void) {
assert(sqlite3_exec(db, "DROP TRIGGER reject_node; CREATE TRIGGER reject_node BEFORE UPDATE ON nodes "
"BEGIN SELECT RAISE(ABORT,'test update rejection'); END", NULL, NULL, NULL) == SQLITE_OK);
assert(topo_node_sqlite_node_update_verified(db, 7, "rejected", key, key, 101, 1) < 0);
assert(topo_node_sqlite_node_set_online(db, 7, 0) < 0 && topo_node_sqlite_node_get_online(db, 7) == 1);
sqlite3_stmt* st = NULL;
assert(sqlite3_prepare_v2(db, "SELECT name,update_ts FROM nodes ORDER BY node_id", -1, &st, NULL) == SQLITE_OK);
assert(sqlite3_step(st) == SQLITE_ROW && !strcmp((const char*)sqlite3_column_text(st, 0), "before"));
@@ -83,6 +84,21 @@ static void test_verified_write(void) {
assert(sqlite3_prepare_v2(db, "SELECT name,update_ts FROM nodes WHERE node_id=7", -1, &st, NULL) == SQLITE_OK);
assert(sqlite3_step(st) == SQLITE_ROW && !strcmp((const char*)sqlite3_column_text(st, 0), "after"));
assert(sqlite3_column_int64(st, 1) == 101); sqlite3_finalize(st);
uint8_t signature[64] = {0};
assert(!topo_node_sqlite_channel_put(db, "123", "test", 7, key, NULL, key, NULL, signature));
assert(!topo_node_sqlite_member_placeholder_put(db, "123", 7, key, key));
assert(sqlite3_exec(db, "CREATE TRIGGER reject_member BEFORE DELETE ON peers_123 "
"BEGIN SELECT RAISE(ABORT,'test member deletion rejection'); END", NULL, NULL, NULL) == SQLITE_OK);
assert(topo_node_sqlite_member_del(db, "123", 7) < 0 && topo_node_sqlite_member_in_channel(db, "123", 7));
assert(sqlite3_exec(db, "DROP TRIGGER reject_member; UPDATE peers_123 SET join_sig=X'01'; "
"UPDATE channels SET x25519_pubkey=X'01'", NULL, NULL, NULL) == SQLITE_OK);
uint64_t timestamp = 77; memset(signature, 0xa5, sizeof(signature));
assert(topo_node_sqlite_member_get_join(db, "123", 7, signature, &timestamp) < 0);
assert(timestamp == 77 && signature[0] == 0xa5);
memset(key, 0xa5, sizeof(key));
assert(topo_node_sqlite_channel_get(db, "123", NULL, 0, NULL, key, NULL, NULL) < 0 && key[0] == 0xa5);
assert(!topo_node_sqlite_member_del(db, "123", 7) && !topo_node_sqlite_member_in_channel(db, "123", 7));
assert(!topo_node_sqlite_node_set_online(db, 7, 0) && !topo_node_sqlite_node_get_online(db, 7));
assert(sqlite3_exec(db, "DROP TABLE nodes", NULL, NULL, NULL) == SQLITE_OK);
assert(topo_node_sqlite_node_update_verified(db, 7, "no table", key, key, 102, 1) < 0);
sqlite3_close(db);