Fies to bugs in low-level encoding/decoding changes.

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@13138 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
CaS 2002-03-18 08:31:39 +00:00
parent bfb4315450
commit d1f2f1254b
4 changed files with 28 additions and 18 deletions

View file

@ -1,3 +1,12 @@
2002-03-18 Richard Frith-Macdonald <rfm@gnu.org>
* Source/Unicode.m: Some boundary error fixes by Alexander Malmberg.
Fixes to encoding table initialisation.
* Source/NSString.m:Fix error in encoding type for initialising from
data. By Alexander Malmberg.
* Source/GSString.m: Correct string length when transmuting an 8-bit
string to a 16-bit string - by Alexander Malmberg.
2002-03-17 Pierre-Yves Rivaille <pyrivail@ens-lyon.fr> 2002-03-17 Pierre-Yves Rivaille <pyrivail@ens-lyon.fr>
* Source/GSAttributedString.m * Source/GSAttributedString.m

View file

@ -1630,6 +1630,7 @@ transmute(ivars self, NSString *aString)
self->_contents.u = tmp; self->_contents.u = tmp;
self->_flags.wide = 1; self->_flags.wide = 1;
self->_count = len; self->_count = len;
self->_capacity = len;
} }
return other; return other;

View file

@ -1215,8 +1215,7 @@ handle_printf_atsign (FILE *stream,
unsigned l = 0; unsigned l = 0;
b = (unsigned char*)[data bytes]; b = (unsigned char*)[data bytes];
if (GSToUnicode(&u, &l, b, len, NSUTF8StringEncoding, GSObjCZone(self), if (GSToUnicode(&u, &l, b, len, encoding, GSObjCZone(self), 0) == NO)
0) == NO)
{ {
DESTROY(self); DESTROY(self);
} }

View file

@ -99,9 +99,11 @@ struct _strenc_ {
NSStringEncoding enc; // Constant representing the encoding. NSStringEncoding enc; // Constant representing the encoding.
const char *ename; // ASCII string representation of name. const char *ename; // ASCII string representation of name.
const char *iconv; /* Iconv name of encoding. If this const char *iconv; /* Iconv name of encoding. If this
* is nul, we cannot use iconv to * is the empty string, we cannot use
* perform conversions to/from this * iconv perform conversions to/from
* encoding. * this encoding.
* NB. do not put a nul pointer in this
* field in the table, use "" instread.
*/ */
BOOL eightBit; /* Flag to say whether this encoding BOOL eightBit; /* Flag to say whether this encoding
* can be stored in a byte array ... * can be stored in a byte array ...
@ -128,11 +130,11 @@ static struct _strenc_ str_encoding_table[] = {
{NSJapaneseEUCStringEncoding, "NSJapaneseEUCStringEncoding","EUC-JP",0,0}, {NSJapaneseEUCStringEncoding, "NSJapaneseEUCStringEncoding","EUC-JP",0,0},
{NSUTF8StringEncoding,"NSUTF8StringEncoding","UTF-8",0,0}, {NSUTF8StringEncoding,"NSUTF8StringEncoding","UTF-8",0,0},
{NSISOLatin1StringEncoding,"NSISOLatin1StringEncoding","ISO-8859-1",1,1}, {NSISOLatin1StringEncoding,"NSISOLatin1StringEncoding","ISO-8859-1",1,1},
{NSSymbolStringEncoding,"NSSymbolStringEncoding",0,0,0}, {NSSymbolStringEncoding,"NSSymbolStringEncoding","",0,0},
{NSNonLossyASCIIStringEncoding,"NSNonLossyASCIIStringEncoding",0,1,1}, {NSNonLossyASCIIStringEncoding,"NSNonLossyASCIIStringEncoding","",1,1},
{NSShiftJISStringEncoding,"NSShiftJISStringEncoding","SHIFT-JIS",0,0}, {NSShiftJISStringEncoding,"NSShiftJISStringEncoding","SHIFT-JIS",0,0},
{NSISOLatin2StringEncoding,"NSISOLatin2StringEncoding","ISO-8859-2",1,1}, {NSISOLatin2StringEncoding,"NSISOLatin2StringEncoding","ISO-8859-2",1,1},
{NSUnicodeStringEncoding, "NSUnicodeStringEncoding",0,0,1}, {NSUnicodeStringEncoding, "NSUnicodeStringEncoding","",0,1},
{NSWindowsCP1251StringEncoding,"NSWindowsCP1251StringEncoding","CP1251",0,0}, {NSWindowsCP1251StringEncoding,"NSWindowsCP1251StringEncoding","CP1251",0,0},
{NSWindowsCP1252StringEncoding,"NSWindowsCP1252StringEncoding","CP1252",0,0}, {NSWindowsCP1252StringEncoding,"NSWindowsCP1252StringEncoding","CP1252",0,0},
{NSWindowsCP1253StringEncoding,"NSWindowsCP1253StringEncoding","CP1253",0,0}, {NSWindowsCP1253StringEncoding,"NSWindowsCP1253StringEncoding","CP1253",0,0},
@ -140,7 +142,7 @@ static struct _strenc_ str_encoding_table[] = {
{NSWindowsCP1250StringEncoding,"NSWindowsCP1250StringEncoding","CP1250",0,0}, {NSWindowsCP1250StringEncoding,"NSWindowsCP1250StringEncoding","CP1250",0,0},
{NSISO2022JPStringEncoding,"NSISO2022JPStringEncoding","ISO-2022-JP",0,0}, {NSISO2022JPStringEncoding,"NSISO2022JPStringEncoding","ISO-2022-JP",0,0},
{NSMacOSRomanStringEncoding, "NSMacOSRomanStringEncoding","MACINTOSH",0,0}, {NSMacOSRomanStringEncoding, "NSMacOSRomanStringEncoding","MACINTOSH",0,0},
{NSProprietaryStringEncoding, "NSProprietaryStringEncoding",0,0,0}, {NSProprietaryStringEncoding, "NSProprietaryStringEncoding","",0,0},
// GNUstep additions // GNUstep additions
{NSISOCyrillicStringEncoding,"NSISOCyrillicStringEncoding","ISO-8859-5",0,1}, {NSISOCyrillicStringEncoding,"NSISOCyrillicStringEncoding","ISO-8859-5",0,1},
@ -155,12 +157,12 @@ static struct _strenc_ str_encoding_table[] = {
{NSISOLatin7StringEncoding, "NSISOLatin7StringEncoding","ISO-8859-13",0,0}, {NSISOLatin7StringEncoding, "NSISOLatin7StringEncoding","ISO-8859-13",0,0},
{NSISOLatin8StringEncoding, "NSISOLatin8StringEncoding","ISO-8859-14",0,0}, {NSISOLatin8StringEncoding, "NSISOLatin8StringEncoding","ISO-8859-14",0,0},
{NSISOLatin9StringEncoding, "NSISOLatin9StringEncoding","ISO-8859-15",0,0}, {NSISOLatin9StringEncoding, "NSISOLatin9StringEncoding","ISO-8859-15",0,0},
{NSUTF7StringEncoding, "NSUTF7StringEncoding",0,0,0}, {NSUTF7StringEncoding, "NSUTF7StringEncoding","",0,0},
{NSGB2312StringEncoding, "NSGB2312StringEncoding","EUC-CN",0,0}, {NSGB2312StringEncoding, "NSGB2312StringEncoding","EUC-CN",0,0},
{NSGSM0338StringEncoding, "NSGSM0338StringEncoding",0,0,1}, {NSGSM0338StringEncoding, "NSGSM0338StringEncoding","",0,1},
{NSBIG5StringEncoding, "NSBIG5StringEncoding","BIG5",0,0}, {NSBIG5StringEncoding, "NSBIG5StringEncoding","BIG5",0,0},
{0,"Unknown encoding",0,0,0} {0,"Unknown encoding","",0,0}
}; };
static struct _strenc_ **encodingTable = 0; static struct _strenc_ **encodingTable = 0;
@ -348,7 +350,7 @@ BOOL
GSIsByteEncoding(NSStringEncoding encoding) GSIsByteEncoding(NSStringEncoding encoding)
{ {
GetAvailableEncodings(); GetAvailableEncodings();
if (encoding == 0 || encoding >= encTableSize || encodingTable[encoding] == 0) if (encoding == 0 || encoding > encTableSize || encodingTable[encoding] == 0)
{ {
return NO; return NO;
} }
@ -359,7 +361,7 @@ NSString*
GSEncodingName(NSStringEncoding encoding) GSEncodingName(NSStringEncoding encoding)
{ {
GetAvailableEncodings(); GetAvailableEncodings();
if (encoding == 0 || encoding >= encTableSize || encodingTable[encoding] == 0) if (encoding == 0 || encoding > encTableSize || encodingTable[encoding] == 0)
{ {
return @"Unknown encoding"; return @"Unknown encoding";
} }
@ -376,7 +378,7 @@ static const char *
iconv_stringforencoding(NSStringEncoding encoding) iconv_stringforencoding(NSStringEncoding encoding)
{ {
GetAvailableEncodings(); GetAvailableEncodings();
if (encoding == 0 || encoding >= encTableSize || encodingTable[encoding] == 0) if (encoding == 0 || encoding > encTableSize || encodingTable[encoding] == 0)
{ {
return ""; return "";
} }
@ -1625,7 +1627,6 @@ tables:
if (rval == (size_t)-1 && errno != E2BIG) if (rval == (size_t)-1 && errno != E2BIG)
{ {
result = NO; result = NO;
iconv_close(cd);
break; break;
} }
dpos = (bsize * sizeof(unichar) - outbytesleft) / sizeof(unichar); dpos = (bsize * sizeof(unichar) - outbytesleft) / sizeof(unichar);
@ -1896,7 +1897,7 @@ bases:
{ {
GROW(); GROW();
} }
if (u < 128) if (u < base)
{ {
ptr[dpos++] = (char)u; ptr[dpos++] = (char)u;
} }
@ -1920,7 +1921,7 @@ bases:
{ {
GROW(); GROW();
} }
if (u < 128) if (u < base)
{ {
ptr[dpos++] = (char)u; ptr[dpos++] = (char)u;
} }