[Toybox] [PATCH] nuke wcrtomb()

Jarno Mäkipää jmakip87 at gmail.com
Thu Apr 11 01:37:16 PDT 2024


there is slight difference between wctoutf8 and wcrtomb, wcrtomb
returns -1 if its presented with non valid char, of its char is not
presentable on current locale. I think wctoutf8 only returns positive
integers.

so your patch to strlower for example might introduce unreachable code path.

diff --git a/lib/lib.c b/lib/lib.c
index 6a4a77dd..79ae2a1d 100644
--- a/lib/lib.c
+++ b/lib/lib.c
@@ -426,7 +426,7 @@ char *strlower(char *s)
     // if we had a valid utf8 sequence, convert it to lower case, and can't
     // encode back to utf8, something is wrong with your libc. But just
     // in case somebody finds an exploit...
-    len = wcrtomb(new, c, 0);
+    len = wctoutf8(new, c);
     if (len < 1) error_exit("bad utf8 %x", (int)c);
     new += len;


On Wed, Apr 10, 2024 at 12:54 AM Oliver Webb via Toybox
<toybox at lists.landley.net> wrote:
>
> Not pulling in 2 localization functions (One from libc, one from lib.c) reduces executable
> size, also more portable on glibc systems because locale installation nonsense. No
> typecasting to int's either.
>
> 15 bytes saved in bloatcheck. tests pass for everything with changes applied (Except the shell).
>
> -   Oliver Webb <aquahobbyist at proton.me>
> _______________________________________________
> Toybox mailing list
> Toybox at lists.landley.net
> http://lists.landley.net/listinfo.cgi/toybox-landley.net

-Jarno


More information about the Toybox mailing list