Mercurial > gnulib
diff lib/unictype/bidi_of.c @ 40210:44073ad4207f
unictype/numeric: Fix undefined behaviour.
Reported by Jeffrey Walton <noloader@gmail.com>.
* lib/unictype/numeric.c (uc_numeric_value): Avoid undefined behaviour
on shift overflow, caught by "gcc -fsanitize=undefined".
* lib/unictype/bidi_of.c (uc_bidi_class): Add cast, for clarity.
* lib/unictype/categ_of.c (lookup_withtable): Likewise.
* lib/unictype/joininggroup_of.c (uc_joining_group): Likewise.
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Fri, 08 Mar 2019 19:17:37 +0100 |
parents | b06060465f09 |
children |
line wrap: on
line diff
--- a/lib/unictype/bidi_of.c Fri Mar 08 09:27:47 2019 -0800 +++ b/lib/unictype/bidi_of.c Fri Mar 08 19:17:37 2019 +0100 @@ -39,7 +39,7 @@ unsigned int index3 = ((uc & bidi_category_header_4) + lookup2) * 5; /* level3 contains 5-bit values, packed into 16-bit words. */ unsigned int lookup3 = - ((u_bidi_category.level3[index3>>4] + (((unsigned int) u_bidi_category.level3[index3>>4] | ((unsigned int) u_bidi_category.level3[(index3>>4)+1] << 16)) >> (index3 % 16)) & 0x1f;