From 79b7252a27f1ab9a9d4c86d1d7c756ca4b369181 Mon Sep 17 00:00:00 2001 From: Cory McWilliams Date: Thu, 11 Dec 2025 22:01:38 -0500 Subject: [PATCH] ssb: Be much more generous about what's allowed in a hashtag ref. Fixes #dev-diary not behaving correctly as a channel. --- src/ssb.db.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/ssb.db.c b/src/ssb.db.c index de648ce5..6a7b75b8 100644 --- a/src/ssb.db.c +++ b/src/ssb.db.c @@ -314,7 +314,7 @@ void tf_ssb_db_init(tf_ssb_t* ssb) "CREATE TRIGGER IF NOT EXISTS messages_ad AFTER DELETE ON messages BEGIN INSERT INTO messages_fts(messages_fts, rowid, content) VALUES ('delete', old.rowid, " "old.content); END"); - if (_tf_ssb_db_has_rows(db, "SELECT * FROM sqlite_schema WHERE type = 'trigger' AND name = 'messages_ai_refs' AND NOT sql LIKE '%ltrim%'")) + if (_tf_ssb_db_has_rows(db, "SELECT * FROM sqlite_schema WHERE type = 'trigger' AND name = 'messages_ai_refs' AND NOT sql LIKE '%INSTR%'")) { tf_printf("Deleting incorrect messages_refs...\n"); _tf_ssb_db_exec(db, "DROP TABLE IF EXISTS messages_refs"); @@ -337,7 +337,8 @@ void tf_ssb_db_init(tf_ssb_t* ssb) "j.value LIKE '&%.sha256' OR " "j.value LIKE '!%%.sha256' ESCAPE '!' OR " "j.value LIKE '@%.ed25519' OR " - "(j.value LIKE '#%' AND ltrim(substr(j.value, 2), 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_') = '') " + "(j.value LIKE '#%' AND INSTR(j.value, ' ') = 0 AND INSTR(j.value, char(9)) = 0 AND INSTR(j.value, char(10)) = 0 AND INSTR(j.value, char(13)) = 0 AND INSTR(j.value, " + "',') = 0) " "ON CONFLICT DO NOTHING"); _tf_ssb_db_exec(db, "COMMIT TRANSACTION"); tf_printf("Done.\n"); @@ -351,7 +352,8 @@ void tf_ssb_db_init(tf_ssb_t* ssb) "j.value LIKE '&%.sha256' OR " "j.value LIKE '!%%.sha256' ESCAPE '!' OR " "j.value LIKE '@%.ed25519' OR " - "(j.value LIKE '#%' AND ltrim(substr(j.value, 2), 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_') = '') " + "(j.value LIKE '#%' AND INSTR(j.value, ' ') = 0 AND INSTR(j.value, char(9)) = 0 AND INSTR(j.value, char(10)) = 0 AND INSTR(j.value, char(13)) = 0 AND INSTR(j.value, ',') " + "= 0) " "ON CONFLICT DO NOTHING; END"); _tf_ssb_db_exec(db, "DROP TRIGGER IF EXISTS messages_ad_refs"); _tf_ssb_db_exec(db, "CREATE TRIGGER IF NOT EXISTS messages_ad_refs AFTER DELETE ON messages BEGIN DELETE FROM messages_refs WHERE messages_refs.message = old.id; END");