From 87676ed0e3be9146a3a5a509d8c6281eb13bb91f Mon Sep 17 00:00:00 2001 From: Alexander Malmberg Date: Wed, 14 Apr 2004 16:23:58 +0000 Subject: [PATCH] (GSToUnicode): In an utf8 sequence, check that the continuation bytes are valid continuation bytes. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@19105 72102866-910b-0410-8b05-ffd578937521 --- ChangeLog | 5 +++++ Source/Additions/Unicode.m | 11 +++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) 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;