|
Message-Id: <CCS3GEVGC65A.2CNTTZYU322F9@mussels> Date: Tue, 13 Jul 2021 11:49:35 -0300 From: Érico Nogueira <ericonr@...root.org> To: <musl@...ts.openwall.com> Subject: Re: Changes for strcspn(), strspn(), strtok() and strtok_r() On Tue Jul 13, 2021 at 9:02 AM -03, Stefan Kanthak wrote: > <https://git.musl-libc.org/cgit/musl/plain/src/string/strcspn.c> > > #include <string.h> > > #define BITOP(a,b,op) \ > ((a)[(size_t)(b)/(8*sizeof *(a))] op (size_t)1<<((size_t)(b)%(8*sizeof > *(a)))) > > -size_t strcspn(const char *s, const char *c) > +size_t strcspn(const char *restrict s, const char *c) > { > - const char *a = s; > + const char *a; > - size_t byteset[32/sizeof(size_t)]; > + size_t byteset[32/sizeof(size_t)] = { 0 }; > > - if (!c[0] || !c[1]) return __strchrnul(s, *c)-a; > + if (!c[0] || !c[1]) return __strchrnul(a=s, *c)-a; This is unspecified behavior and could lead to UB (reading from uninitialized a). musl enables -Wsequence-point, so building with --enable-warnings is important to catch such issues. > > - memset(byteset, 0, sizeof byteset); > for (; *c && BITOP(byteset, *(unsigned char *)c, |=); c++); > - for (; *s && !BITOP(byteset, *(unsigned char *)s, &); s++); > - return s-a; > + for (a=s; *a && !BITOP(byteset, *(unsigned char *)a, &); a++); > + return a-s; > }
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.