diff options
| author | blasty <peter@haxx.in> | 2026-07-31 09:47:15 +0200 |
|---|---|---|
| committer | blasty <peter@haxx.in> | 2026-07-31 09:47:15 +0200 |
| commit | 01802644a4256868342644df87743884b7962a44 (patch) | |
| tree | 2f7ae49fd12a1df2574a4fc2a0a8f52423630c0e /docs/RPC.md | |
| parent | rpc: stop lying to the driver about renames, modals and teardown (diff) | |
| download | ida-tui-01802644a4256868342644df87743884b7962a44.tar.gz ida-tui-01802644a4256868342644df87743884b7962a44.tar.xz ida-tui-01802644a4256868342644df87743884b7962a44.zip | |
rpc: a navigation that timed out reported success and corrupted the next edit
goto/open ran `settle(app, pred, timeout)` and threw the result away. On a large
database the listing build routinely outruns the default 20 s, so the verb
returned a normal snapshot while the view had not moved. Every subsequent
rename/comment then applied to wherever the caller *used* to be.
Reproduced on a live pane against a 4 MB Go binary: `goto 0x1002019b0`
returned ok with the view still at 0x100001000, and the following
`rename main_inflate_zlib` renamed internal/abi.BoundsDecode instead — then the
rename's own snapshot showed `main_inflate @ 0x1002019b0`, because by the time
it was taken the goto had finally landed. Success reported, right-looking
readback, wrong function edited, and it survived a save.
This is what made an agent session stamp net_writeFull onto main_usage and
conclude the tooling was flaky.
goto/open now raise TimeoutError naming the target and where we actually are,
suggesting a larger timeout=. _press() does the same for follow/toggle_view/
hex/xrefs/structs, which had the identical "predicate ignored" shape.
tests/test_scenarios.py: 212 passed, 0 failed.
Diffstat (limited to 'docs/RPC.md')
0 files changed, 0 insertions, 0 deletions
