Skip to content

fix(cam_hal): prevent SOI scan from (1) running on length<3 and (2) over-reading the last 2 bytes #760

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: master
Choose a base branch
from

Conversation

RubenKelevra
Copy link

@RubenKelevra RubenKelevra commented Jul 1, 2025

x## Description

Changes:

  • Store SOI as a 3-byte array (0xFF D8 FF) and use sizeof() everywhere.

  • Early-exit when length < 3 to avoid over-reading

  • calculate end index correctly, to avoid over-reading

  • First occurrence of each warning:
    ESP_DRAM_LOGW() → zero stack after the first print.

  • Subsequent occurrences:
    count with a uint16_t and emit a literal ESP_LOGW() only
    every 100th event (~ 60 B stack usage).

  • Counters auto-reset at 10 000 to avoid wraparound.

Related

In the search for the cause of crashes reported by @turenkomv here: esphome/esphome#8832 (comment) I found this overread of a pointer, which can cause undefined behaviour.

Checklist

Before submitting a Pull Request, please ensure the following:

  • 🚨 This PR does not introduce breaking changes.
  • All CI checks (GH Actions) pass. (?)
  • Documentation is updated as needed.
  • Tests are updated or added as necessary.
  • Code is well-commented, especially in complex areas.
  • Git history is clean — commits are squashed to the minimum necessary.

              and (2) over-reading the last 2 bytes

Changes:
* Store SOI as a 3-byte array (0xFF D8 FF) and use sizeof() everywhere.
* Early-exit when length < 3 to avoid over-reading
* calculate end index correctly, to avoid over-reading
@RubenKelevra
Copy link
Author

@turenkomv thanks for your patience. Sadly this bug can IMHO not cause a stack trashing, only cause wrong returns.

@RubenKelevra RubenKelevra marked this pull request as draft July 1, 2025 21:05
…stack footprint

* First occurrence of each warning:
      ESP_DRAM_LOGW()  → zero stack after the first print.
* Subsequent occurrences:
      count with a uint16_t and emit a **literal** ESP_LOGW() only
      every 100th event (~ 60 B stack usage).
* Counters auto-reset at 10 000 to avoid wraparound.
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.

1 participant