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.
Activity
matthijskooijman commentedon Sep 8, 2020
Sounds like sloppy typing indeed, would be good to fix. I haven't looked closely, but I think that using
char
andchar*
in the public API is ok (since that's the common typing for a string), but internally, the code should make sure to either convert the target touint8_t
, or convert the thing to compare with tochar
too.Did you try changing the typing to confirm that this indeeds fixes the problem?
Note that development on the non-arch-specific code happens at ArduinoCore-API repo now, so I'll transfer this issue there.