Problem with expansion of %{Ldap-UserDn} containing UTF-8 (cf. Bug #411)

Enrik Berkhan enrik#freeradius at planb.de
Mon Aug 27 17:40:23 CEST 2007


Enrik Berkhan wrote:

Never post before doing at least _some_ testing :)

> static int valid_utf8(const unsigned char *p, size_t len)
> {
>   if (len >= 1
>       && p[0] < 0x7f) {
>     return 1;
>   } else if (len >= 2
>              && p[0] >= 0xC0 && p[0] < 0xE0
>              && (p[1]&0x80) == 0x80) {
Of course, all the masks should be 0xC0 instead of 0x80.

>     return 2;
>   } else if (len >= 3
>              && p[0] >= 0xE0 && p[0] < 0xF0
>              && (p[1]&0x80) == 0x80 && (p[2]&0x80) == 0x80) {
>     return 3;
>   } else if (len >= 4
>              && p[0] >= 0xF0 && p[0] < 0xF8
>              && (p[1]&0x80) == 0x80 && (p[2]&0x80) == 0x80
>              && (p[3]&0x80) == 0x80) {
>     return 4;
>   } else if (len >= 5
>              && p[0] >= 0xF8 && p[0] < 0xFC
>              && (p[1]&0x80) == 0x80 && (p[2]&0x80) == 0x80
>              && (p[3]&0x80) == 0x80 && (p[4]&0x80) == 0x80) {
>     return 5;
>   } else if (len >= 6
>              && p[0] >= 0xFC && p[0] < 0xFE
>              && (p[1]&0x80) == 0x80 && (p[2]&0x80) == 0x80
>              && (p[3]&0x80) == 0x80 && (p[4]&0x80) == 0x80
>              && (p[5]&0x80) == 0x80) {
>     return 6;
>   }
>   return 0;
> }

And the code still allows non shortest possible sequences.

Enrik



More information about the Freeradius-Devel mailing list