From 444cbf20326aaa4eef05802d27c7c054ead2b834 Mon Sep 17 00:00:00 2001 From: pasta Date: Tue, 3 Mar 2026 08:13:20 -0600 Subject: [PATCH 1/2] Merge #7191: fix(qt): reseat quorum labels when new types are inserted 641b3ea53ddd002b47403a20eec4f2f4486136eb fix(qt): reseat quorum labels when new types are inserted (UdjinM6) Pull request description: ## Issue being fixed or feature implemented When new quorum types appear during reindexing, existing labels that follow the insertion point in the grid were not being repositioned, causing overlapping text in the Information tab's Quorums section. before: Screenshot 2026-03-01 at 13 56 12 after: Screenshot 2026-03-02 at 19 07 23 ## What was done? ## How Has This Been Tested? reindex with and without the patch on testnet ## Breaking Changes n/a ## Checklist: - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have added or updated relevant unit/integration/functional/e2e tests - [ ] I have made corresponding changes to the documentation - [ ] I have assigned this pull request to a milestone ACKs for top commit: kwvg: utACK 641b3ea53ddd002b47403a20eec4f2f4486136eb Tree-SHA512: 6ab68bbda76975a2c2cec8a85e85c6ebc0a580dbf8012761a42c8d8d61e318d830bad47375a8af2d0c1754ef6c485f9204aa0e6d2f6898438d0699ebfbeadfa5 --- src/qt/networkwidget.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/qt/networkwidget.cpp b/src/qt/networkwidget.cpp index 774125031b5f..6ff8297f3c7b 100644 --- a/src/qt/networkwidget.cpp +++ b/src/qt/networkwidget.cpp @@ -240,6 +240,7 @@ void NetworkWidget::handleQrDataChanged() it->second.second->setToolTip(tr("Waiting for blockchain sync…")); grid->addWidget(it->second.first, current_row, 0); grid->addWidget(it->second.second, current_row, 1); + needs_reseating = true; } else if (needs_reseating) { grid->removeWidget(it->second.first); grid->removeWidget(it->second.second); From 240a95ff0f5f0ca2c8a03fd02c36b3a57b70db07 Mon Sep 17 00:00:00 2001 From: pasta Date: Tue, 3 Mar 2026 08:13:54 -0600 Subject: [PATCH 2/2] Merge #7193: fix: reject identity elements in deserialization and key generation 42b707bba4c5e6ac7c66f6ab31b84084b741da6c fix: reject identity elements in deserialization and key generation (UdjinM6) Pull request description: ## Issue being fixed or feature implemented Identity elements are mathematically valid curve points but have no legitimate use in the protocol. ## What was done? Reject BLS identity elements (point at infinity for G1/G2) at the deserialization boundary in SetBytes(). Also reject zero private keys in MakeNewKey(). Identity elements would not pass further validation anyway, reject them early. ## How Has This Been Tested? Run tests ## Breaking Changes n/a ## Checklist: - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have added or updated relevant unit/integration/functional/e2e tests - [ ] I have made corresponding changes to the documentation - [ ] I have assigned this pull request to a milestone ACKs for top commit: PastaPastaPasta: utACK 42b707bba4c5e6ac7c66f6ab31b84084b741da6c Tree-SHA512: 047b098fd56b5da07099fde9b03ada7dd4b42698f47cdc84d3c855c11b0122d46a74765fcaaad5d73465abd0d19605445c9e4b6ab6182cf2b318bfe695d2ef0a --- src/bls/bls.cpp | 3 +++ src/bls/bls.h | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/src/bls/bls.cpp b/src/bls/bls.cpp index bf71b40ff50c..49981ee9190f 100644 --- a/src/bls/bls.cpp +++ b/src/bls/bls.cpp @@ -66,6 +66,9 @@ void CBLSSecretKey::MakeNewKey() GetStrongRandBytes({buf, sizeof(buf)}); try { impl = bls::PrivateKey::FromBytes(bls::Bytes(reinterpret_cast(buf), SerSize)); + if (impl == bls::PrivateKey()) { + continue; + } break; } catch (...) { } diff --git a/src/bls/bls.h b/src/bls/bls.h index 6c3a7f2010e9..19dd5ae7611c 100644 --- a/src/bls/bls.h +++ b/src/bls/bls.h @@ -111,6 +111,11 @@ class CBLSWrapper } else { try { impl = ImplType::FromBytes(bls::Bytes(vecBytes.data(), vecBytes.size()), specificLegacyScheme); + if (impl == ImplType()) { + Reset(); + cachedHash.SetNull(); + return; + } fValid = true; } catch (...) { Reset();