Skip to content

fix(server): handle multi-item WRITE_VAR requests - #959

Merged
gijzelaerr merged 2 commits into
masterfrom
fix/multi-item-write
Oct 28, 2026
Merged

gijzelaerr merged 2 commits into
masterfrom
fix/multi-item-write

Conversation

@gijzelaerr

Copy link
Copy Markdown
Owner

Fixes #958.

The pure-Python server parsed only the first address spec and data item of a WRITE_VAR request, and always answered with one success code. A PUT with several areas silently dropped every item after the first.

Changes

  • _parse_request_parameters parses all address specs for multi-item writes, like it already does for reads.
  • _parse_request keeps the raw data section so it can be split per item (honouring fill bytes after odd-length items).
  • New _handle_multi_write_area writes each item and returns the real item count with one return code per item: 0xFF success, 0x0A area not registered, 0x05 out of range, 0x07 truncated data. A failing item is not written and does not block the others.
  • Single-item writes are unchanged.

Tests

  • test_multi_item_write_writes_every_item: the reproduction from the issue (4 DBs, odd and even lengths).
  • test_multi_item_write_reports_per_item_errors: unregistered DB, out-of-range item, and a valid item in one request.

Both fail on master and pass here. Full suite, mypy and pre-commit pass.

The server parsed only the first address spec and data item of a WRITE_VAR
request and always answered with one success code, so a PUT with several
areas silently dropped every item after the first. Parse all address specs,
split the data section per item, write each one, and return a return code
per item.

Fixes #958
@gijzelaerr
gijzelaerr merged commit a84d13e into master Oct 28, 2026
20 checks passed
@gijzelaerr
gijzelaerr deleted the fix/multi-item-write branch October 28, 2026 14:08
@gijzelaerr gijzelaerr mentioned this pull request Oct 28, 2026
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.

Multi-item WRITE_VAR requests only write the first item

1 participant