Messages in this thread | | | Date | Thu, 13 Oct 2022 08:56:03 +0200 | From | Willy Tarreau <> | Subject | Re: [PATCH] tools/nolibc/string: fix memcmp() implementation |
| |
Hi Rasmus,
On Mon, Oct 10, 2022 at 01:36:06PM +0200, Rasmus Villemoes wrote: > The C standard says that memcmp() must treat the buffers as consisting > of "unsigned chars". If char happens to be unsigned, the casts are ok, > but then obviously the c1 variable can never contain a negative > value. And when char is signed, the casts are wrong, and there's still > a problem with using an 8-bit quantity to hold the difference, because > that can range from -255 to +255. > > For example, assuming char is signed, comparing two 1-byte buffers, > one containing 0x00 and another 0x80, the current implementation would > return -128 for both memcmp(a, b, 1) and memcmp(b, a, 1), whereas one > of those should of course return something positive.
You're totally right of course, thank you for spotting this one! I'm queuing it now.
Regards, Willy
| |