diff --git a/ChangeLog b/ChangeLog index 09f1a0a03..48b1cfc4f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2004-04-14 18:20 Alexander Malmberg + + * Source/Additions/Unicode.m (GSToUnicode): In an utf8 sequence, + check the the continuation bytes are valid continuation bytes. + 2004-04-13 Richard Frith-Macdonald * Tools/GNUmakefile: diff --git a/Source/Additions/Unicode.m b/Source/Additions/Unicode.m index db8223327..cf72a851d 100644 --- a/Source/Additions/Unicode.m +++ b/Source/Additions/Unicode.m @@ -1211,8 +1211,15 @@ GSToUnicode(unichar **dst, unsigned int *size, const unsigned char *src, /* get the codepoint */ for (i = 1; i < sle; i++) { + if (src[spos + i] < 0x80 || src[spos + i] >= 0xc0) + break; u = (u << 6) | (src[spos + i] & 0x3f); } + if (i < sle) + { + result = NO; + break; + } u = u & ~(0xffffffff << ((5 * sle) + 1)); spos += sle; } @@ -1270,7 +1277,7 @@ GSToUnicode(unichar **dst, unsigned int *size, const unsigned char *src, case NSNonLossyASCIIStringEncoding: case NSASCIIStringEncoding: case NSISOLatin1StringEncoding: - case NSUnicodeStringEncoding: + case NSUnicodeStringEncoding: while (spos < slen) { if (dpos >= bsize) @@ -1835,7 +1842,7 @@ GSFromUnicode(unsigned char **dst, unsigned int *size, const unichar *src, goto bases; case NSISOLatin1StringEncoding: - case NSUnicodeStringEncoding: + case NSUnicodeStringEncoding: base = 256; goto bases;