Skip to content

Fix defects found since 0.7.0 - #913

Merged
reardencode merged 14 commits into
masterfrom
review/post-070-fixes
Oct 5, 2026
Merged

reardencode merged 14 commits into
masterfrom
review/post-070-fixes

Conversation

@rearden-grok

@rearden-grok rearden-grok Bot commented Oct 5, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Review of v0.7.0..HEAD. Each fix-now defect is one commit and a test that asserts what a peer, client, or operator observes.

Finding Commit
estimatesmartfee / estimaterawfee / Electrum blockchain.estimatefee returned the 1-block rate for target 2 6379d2ea1
Evicting one announcer deleted a shared orphan 43c260cef
A duplicate tx pair whose merkle root still matches was accepted on tip follow and on compact reconstruct (CVE-2012-2459) d3122c01e
A refused local I2P SAM port rotated the session f6efa2e79
The refused-port check dials stream_connect_once and classifies sam_dial_error 17ee0245c
Outbound dial filled from clearnet and recorded a failed onion as 0.0.0.0 93a9a95a0
submitblock cached a non-tip sibling that spends a coin the tip also spent 3cae0e822
An Esplora singleflight waiter put an older scripthash back over a newer last-1 e079c6f3f
A leader still inside its handler, and a waiter that wakes after a newer script, keep that newer last-1 ed0a692b8
Esplora after_txid outside that script's history restarted page 1 ed8687092
A spend-durable marker above a shrunk tip skipped annotation b555c36aa
A newest-first scripthash page re-read the unspent tail on every wave e524528bd

Deferred

  • Time-based IBD stall cooldown is still keyed by SocketAddr. Onion and I2P have no socket, so that cooldown does not stick to them. Retargeting the map to NetAddr is a larger change than this review. The picker already skips a recently failed overlay when a fresh one exists.
  • --rpc-work-queue 0 is the default queue of 16. The Unreleased sentence that calls 0 unlimited is stale. CHANGELOG.md is not edited on this branch.
  • The Unreleased Esplora wallet WebSocket sentence describes an API changelog.d/drop-esplora-ws.md already removed.
  • changelog.d/fee-history-from-chain.md still says package rates. The code is an individual-tx p10. Intentional product, stale note.
  • Deep multi-script Esplora POST cursors older than the first 25 rows of each script still 422. That page size is the documented merge.
  • Mempool expiry's 0 disable path is unreachable after the setter stores at least one hour. Not a user-visible bug.
  • SV2 keeps a per-write deadline so a slow reader can still take a multi-MB frame. A 1-byte drip is not a defect.
  • No mainnet datadir and no operator-host perf A/B.

The separate shrink-marker test was folded into poison_prev_edge_shrinks_tip (d8180a6fa). CI coverage passed on 17ee0245c (run 37259161203). Master also includes #914 (mempool-torn-persist); that open path was read and left as landed.

Test plan

  • cargo fmt --check and cargo clippy -D warnings on the touched crates
  • Touched journeys twice, including orphanage::tests::mempool_under_pressure, rpc_regtest_chain_ops, and chain_connect_reorg_and_growth
  • Required CI on 17ee0245c: qc, test, windows, macos, coverage

Comment thread crates/rbitcoin-store/src/integrity.rs Fixed
Comment thread crates/rbitcoin-store/src/integrity.rs Fixed
Comment thread crates/rbitcoin-store/src/integrity.rs Fixed
@rearden-grok
rearden-grok Bot force-pushed the review/post-070-fixes branch from 75fcb65 to 1bd3541 Compare October 5, 2026 02:11
estimatesmartfee, estimaterawfee, and Electrum blockchain.estimatefee
mapped target 2 onto the next-block rate. Only target 0 is that horizon.
A second announcer's reserve used to remove the txid for every peer.
The parent still delivers the copy the other peer announced.
CVE-2012-2459 leaves check_merkle_root true. Tip follow disconnects
that peer, and compact reconstruction sends the hash back to getdata.
The dial error string contained "STREAM CONNECT", which session_dead
treats as a dead SAM session. A refused local port is a dial failure.
The picker returned before onion and I2P, and a failed overlay peer
was recorded as 0.0.0.0. A fresh overlay keeps one seat, and an
unspecified version socket is not inserted.
The cheap prevout read used tip spentness for a parent that is not
the tip, then remembered the header as invalid. Accept holds the branch.
A waiter always wrote its scripthash back into the client's last-1
slot. A script that won the slot while the waiter was in flight stays.
A cursor that exists somewhere else on the chain used to restart page
1. The page, the summary, the chain route, and a multi POST now return
after_txid not found and no rows.
Open revalidation and spend replay lower a marker above the surviving
tip, so a later confirm still annotates spends. A checkpoint cannot
publish the pre-disconnect height over that clamp.
A present create.loc span never closed the page, so each later create
re-read the tail. One tail read now keeps only creates that can still
change the page.
The separate fixture repeated a zero block hash. CodeQL treats that new
literal as a hard-coded salt. The prev-edge shrink already builds the
chain; it now also clamps a marker above the new tip.
A leader that returned after a newer script finished wrote last_sh
unconditionally. A waiter that woke after that newer script used its
own later stamp and put the old scripthash back. Publish the leader's
start sequence, and only when it is at least the one stored.
The session-dead test built the dial error string itself, so the old
stream-connect prefix still passed. stream_connect_once now uses
sam_dial_error, and the test dials a closed local port.
@rearden-grok
rearden-grok Bot force-pushed the review/post-070-fixes branch from 1bd3541 to 17ee024 Compare October 5, 2026 03:22
@reardencode
reardencode merged commit 391449b into master Oct 5, 2026
18 checks passed
@rearden-grok
rearden-grok Bot deleted the review/post-070-fixes branch October 6, 2026 05:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants