X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fluci.git;a=blobdiff_plain;f=libs%2Fweb%2Fsrc%2Ftemplate_utils.c;h=36f08aa2291eba2600a564643f4fa2e03f5472b8;hp=f17d3b3e9b64cbc99d3f9a5cdc6d3442c881450a;hb=9fcdf0fe81f3c5142b8abd3f701dc3964549742a;hpb=8ac568acb018702b2d8234b74773877e470e4ae5 diff --git a/libs/web/src/template_utils.c b/libs/web/src/template_utils.c index f17d3b3e9..36f08aa22 100644 --- a/libs/web/src/template_utils.c +++ b/libs/web/src/template_utils.c @@ -136,23 +136,38 @@ static inline int mb_is_shortest(unsigned char *s, int n) { case 2: /* 1100000x (10xxxxxx) */ - return ((*s & 0x1E) > 0); + return !(((*s >> 1) == 0x60) && + ((*(s+1) >> 6) == 0x02)); case 3: /* 11100000 100xxxxx (10xxxxxx) */ - return ((*s & 0x1F) > 0) && ((*(s+1) & 0x60) > 0); + return !((*s == 0xE0) && + ((*(s+1) >> 5) == 0x04) && + ((*(s+2) >> 6) == 0x02)); case 4: /* 11110000 1000xxxx (10xxxxxx 10xxxxxx) */ - return ((*s & 0x0F) > 0) && ((*(s+1) & 0x70) > 0); + return !((*s == 0xF0) && + ((*(s+1) >> 4) == 0x08) && + ((*(s+2) >> 6) == 0x02) && + ((*(s+3) >> 6) == 0x02)); case 5: /* 11111000 10000xxx (10xxxxxx 10xxxxxx 10xxxxxx) */ - return ((*s & 0x07) > 0) && ((*(s+1) & 0x78) > 0); + return !((*s == 0xF8) && + ((*(s+1) >> 3) == 0x10) && + ((*(s+2) >> 6) == 0x02) && + ((*(s+3) >> 6) == 0x02) && + ((*(s+4) >> 6) == 0x02)); case 6: /* 11111100 100000xx (10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx) */ - return ((*s & 0x03) > 0) && ((*(s+1) & 0x7C) > 0); + return !((*s == 0xF8) && + ((*(s+1) >> 2) == 0x20) && + ((*(s+2) >> 6) == 0x02) && + ((*(s+3) >> 6) == 0x02) && + ((*(s+4) >> 6) == 0x02) && + ((*(s+5) >> 6) == 0x02)); } return 1;