From d106a027c7c5324b22afe12a0a40db4406fe2aee Mon Sep 17 00:00:00 2001 From: Alexander Krotov Date: Wed, 5 Aug 2020 00:00:00 +0300 Subject: [PATCH] Make Peerstate.save_to_db atomic This should prevent creation of acpeerstate entries using default values (empty strings) for fingerprint columns. --- src/peerstate.rs | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/peerstate.rs b/src/peerstate.rs index b864a2e40..ea44f84a6 100644 --- a/src/peerstate.rs +++ b/src/peerstate.rs @@ -403,21 +403,20 @@ impl<'a> Peerstate<'a> { } pub async fn save_to_db(&self, sql: &Sql, create: bool) -> crate::sql::Result<()> { - if create { - sql.execute( - "INSERT INTO acpeerstates (addr) VALUES(?);", - paramsv![self.addr], - ) - .await?; - } - if self.to_save == Some(ToSave::All) || create { sql.execute( + if create { + "INSERT INTO acpeerstates (last_seen, last_seen_autocrypt, prefer_encrypted, \ + public_key, gossip_timestamp, gossip_key, public_key_fingerprint, gossip_key_fingerprint, \ + verified_key, verified_key_fingerprint, addr \ + ) VALUES(?,?,?,?,?,?,?,?,?,?,?)" + } else { "UPDATE acpeerstates \ SET last_seen=?, last_seen_autocrypt=?, prefer_encrypted=?, \ public_key=?, gossip_timestamp=?, gossip_key=?, public_key_fingerprint=?, gossip_key_fingerprint=?, \ verified_key=?, verified_key_fingerprint=? \ - WHERE addr=?;", + WHERE addr=?" + }, paramsv![ self.last_seen, self.last_seen_autocrypt,