arduino / arduino/ArduinoCore-API

Stream::find() not working for values above 0x7F

Open
#119 1 comment 0 reactions 0 assignees Claimed by @asumo-1xts View on GitHub
Dominant language
C++
Stars
306
Forks
150
PR merge metrics
No merged PRs in 30d

Description

I found out that the `Stream::find()` (and all related functions, findUntil() etc), does not work when the sequence to be found contains values above 0x7F. I believe this is because the function uses char instead of uint8_t.

Example, using these definitions:

char a = 0xff;
uint8_t b = 0xff;

`a == b` is false, and therefore the find() method does not return a match when supplied a uint8_t[] array containing values above 0x7F, since the array gets casted to char. Changing the declaration of find() to uint8_t should solve the issue.

I don't know if ignoring values above 0x7F is the intended behaviour, but if that is the case I think the documentation should be more specific and explain this case better. In any case, if the current behaviour is the intended one, i do not see the reason behind it.

First time reporting something on Arduino, sorry if I overlooked something obvious.

Contributor guide

No contributing guide indexed for this repository

Research direction

Inspect the Stream::find() and related findUntil() entry points and reproduce the reported mismatch with a uint8_t sequence containing 0xff. Confirm the intended handling of values above 0x7F, then verify that matching works consistently across the affected functions and that the open pull request does not already address it.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
api, embedded-iot
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.