diff options
| author | blasty <blasty@local> | 2026-08-07 13:50:42 +0200 |
|---|---|---|
| committer | blasty <blasty@local> | 2026-08-07 13:50:42 +0200 |
| commit | df4a42e25881531469a0a8399f457ecf58cab099 (patch) | |
| tree | ef1198af53d5dc57710975da00ac686b235c9631 /experiments/graph_spike.py | |
| parent | codemode: carry over the listing + operand-format tools, and stop reshipping ... (diff) | |
| download | ida-tui-df4a42e25881531469a0a8399f457ecf58cab099.tar.gz ida-tui-df4a42e25881531469a0a8399f457ecf58cab099.tar.xz ida-tui-df4a42e25881531469a0a8399f457ecf58cab099.zip | |
codemode: rename takes a LIST of edits per category, not just one
Found by tests/test_rawimage_rpc.py, which the earlier runs had not covered:
every rename_many check failed with
{"ok": 0, "failed": 2, "errors": [{"addr": null,
"error": "list indices must be integers or slices, not str"}]}
The port's rename read each category as a single edit (edit["addr"]), but the
batch shape is {func: [{addr,name}, ...], data: [...], local/stack: [...]} --
a list per category, with a single dict accepted as shorthand. Indexing the
list with "addr" raised, and because the whole category was one try block the
error came back attached to addr=null, naming nothing.
That is the entire point of the rename_many RPC verb: a firmware image arrives
with hundreds of names from a loader map or an emulator's symbols.json, and
applying them one at a time costs a navigation plus two prompt round trips
each. Only the single-rename UI path worked.
Now mirrors the real tool: one row per EDIT (addr/old/name plus a per-row
error), a summary counting edits rather than categories, conflict detection
before the write, and dry_run/allow_overwrite/stop_on_error. Renaming a
function refreshes Hex-Rays' ctext, whose cache is per function and persisted
in the .i64 -- without it the pseudocode keeps calling the old name forever
while every other readback reports the new one. Clearing a label with an empty
new name is kept as a real request (the scenarios revert with it) rather than
being rejected as a missing argument.
tests/test_rawimage_rpc.py: 14 passed/7 failed -> 21 passed, 0 failed.
Diffstat (limited to 'experiments/graph_spike.py')
0 files changed, 0 insertions, 0 deletions
