Fix KeyError on malformed Bitcoin Core RPC responses #2532
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
BitcoinRPC.__getattr__crashes withKeyError: 'error'when Bitcoin Core returns malformed JSON-RPC responses. The code blindly accessedr['error']['message']without validating response structure.Changes
RPC error handling (
rpc.py)RpcError.init_via_response()to handle both Response objects and dictsTest coverage (
test_rpc.py)test_BitcoinRpc_malformed_responsecovering 6 malformed response scenariosExample
Before:
After:
All valid JSON-RPC 2.0 responses continue to work unchanged.
Warning
Firewall rules blocked me from connecting to one or more addresses (expand for details)
I tried to connect to the following addresses, but was blocked by firewall rules:
esm.ubuntu.com/usr/lib/apt/methods/https /usr/lib/apt/methods/https tgresql cal/bin/rustc ver -plu�� hon3.12 -plugin-opt=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper de/node/bin/bash -plugin-opt=-pascut tgresql -plugin-opt=-pass-through=-lc /x86_64-linux-gnu/13/cc1 -I xml2 hon3.12 p/bin/git -I -x86_64-cpython--rs tgresql as(dns block)httpbin.org/usr/bin/python3 python3 /usr/include/pos--force-confdef -I as ctly�� /usr/include/pyt--print-foreign-architectures -I nfig/composer/vendor/bin/lsb_release -I /usr/include/pos-x -I hg root�� p/specter-desktop/.git --gdwarf-5 lsb_release -o build/temp.linux--listfiles /tmp/cc4LLc0S.s git(dns block)/usr/bin/python3 python3 /usr/include/pos--force-confdef -I as -I rd -I k/_temp/ghcca-no--force-confdef -I /usr/include/pos--fsys-tarfile -I git rev-�� p/specter-desktop/.git --gdwarf-5 ame -o e response struccall /tmp/ccna9yb6.s bash(dns block)If you need me to access, download, or install something from one of these locations, you can either:
Original prompt
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.