Skip to content

Fix struct.error on malformed Xiaomi 0x4851/0x4852 payloads#1535

Merged
Ernst79 merged 1 commit intocustom-components:masterfrom
xtymmms1021:fix/xiaomi-duration-payload-guards
Mar 22, 2026
Merged

Fix struct.error on malformed Xiaomi 0x4851/0x4852 payloads#1535
Ernst79 merged 1 commit intocustom-components:masterfrom
xtymmms1021:fix/xiaomi-duration-payload-guards

Conversation

@xtymmms1021
Copy link
Copy Markdown
Contributor

Summary

This PR prevents struct.error: unpack requires a buffer of 4 bytes for malformed Xiaomi duration objects.

Changes:

  • Guard obj4851 against invalid payload lengths (len(xobj) != 4)
  • Guard obj4852 against invalid payload lengths (len(xobj) != 4)
  • Add unit tests for both objects:
    • valid 4-byte payloads
    • malformed payload lengths (short/long)

When malformed payloads are received, the parser now safely returns {} instead of raising.

Linked issues

Fixes #1534
Related to #1504

Validation

  • python -m py_compile custom_components/ble_monitor/ble_parser/xiaomi.py
  • pytest custom_components/ble_monitor/test/test_xiaomi_parser.py -k 'obj4851 or obj4852' -q
    • Result: 4 passed

@Ernst79
Copy link
Copy Markdown
Collaborator

Ernst79 commented Mar 22, 2026

Thanks

@Ernst79 Ernst79 merged commit 06b3f31 into custom-components:master Mar 22, 2026
6 checks passed
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.

[Bug]: Guard malformed Xiaomi 0x4851/0x4852 duration payloads

2 participants