mirror of
https://github.com/gnustep/libs-base.git
synced 2025-05-20 12:16:40 +00:00
Fix for bug when conversion fails due to lack of buffer space.
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@23007 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
963ee22545
commit
c152566da3
2 changed files with 38 additions and 22 deletions
|
@ -1174,7 +1174,7 @@ if (dst == 0) \
|
|||
else if (zone == 0) \
|
||||
{ \
|
||||
result = NO; /* No buffer growth possible ... fail. */ \
|
||||
break; \
|
||||
goto done; \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
|
@ -1325,14 +1325,14 @@ GSToUnicode(unichar **dst, unsigned int *size, const unsigned char *src,
|
|||
if ((sle < 2) || (sle > 6))
|
||||
{
|
||||
result = NO;
|
||||
break;
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* do we have enough bytes ? */
|
||||
if ((spos + sle) > slen)
|
||||
{
|
||||
result = NO;
|
||||
break;
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* get the codepoint */
|
||||
|
@ -1345,7 +1345,7 @@ GSToUnicode(unichar **dst, unsigned int *size, const unsigned char *src,
|
|||
if (i < sle)
|
||||
{
|
||||
result = NO;
|
||||
break;
|
||||
goto done;
|
||||
}
|
||||
u = u & ~(0xffffffff << ((5 * sle) + 1));
|
||||
spos += sle;
|
||||
|
@ -1357,13 +1357,13 @@ GSToUnicode(unichar **dst, unsigned int *size, const unsigned char *src,
|
|||
|| (u >= 0xfdd0 && u <= 0xfdef))
|
||||
{
|
||||
result = NO; // Invalid character.
|
||||
break;
|
||||
goto done;
|
||||
}
|
||||
|
||||
if ((u >= 0xd800) && (u <= 0xdfff))
|
||||
{
|
||||
result = NO; // Unmatched half of surrogate pair.
|
||||
break;
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -1412,7 +1412,7 @@ GSToUnicode(unichar **dst, unsigned int *size, const unsigned char *src,
|
|||
if (c > 127)
|
||||
{
|
||||
result = NO; // Non-ascii data found in input.
|
||||
break;
|
||||
goto done;
|
||||
}
|
||||
if (dpos >= bsize)
|
||||
{
|
||||
|
@ -1542,7 +1542,7 @@ tables:
|
|||
{
|
||||
NSLog(@"No iconv for encoding x%02x", enc);
|
||||
result = NO;
|
||||
break;
|
||||
goto done;
|
||||
}
|
||||
if (slen == 0)
|
||||
{
|
||||
|
@ -1554,7 +1554,7 @@ tables:
|
|||
NSLog(@"No iconv for encoding %@ tried to use %s",
|
||||
GetEncodingName(enc), estr);
|
||||
result = NO;
|
||||
break;
|
||||
goto done;
|
||||
}
|
||||
|
||||
inbuf = (unsigned char*)src;
|
||||
|
@ -1587,7 +1587,7 @@ tables:
|
|||
else
|
||||
{
|
||||
result = NO;
|
||||
break;
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
} while (!done || rval != 0);
|
||||
|
@ -1599,6 +1599,8 @@ tables:
|
|||
#endif
|
||||
}
|
||||
|
||||
done:
|
||||
|
||||
/*
|
||||
* Post conversion ... set output values.
|
||||
*/
|
||||
|
@ -1697,7 +1699,7 @@ if (dst == 0) \
|
|||
else if (zone == 0) \
|
||||
{ \
|
||||
result = NO; /* No buffer growth possible ... fail. */ \
|
||||
break; \
|
||||
goto done; \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
|
@ -1878,6 +1880,11 @@ GSFromUnicode(unsigned char **dst, unsigned int *size, const unichar *src,
|
|||
bsize = *size;
|
||||
}
|
||||
|
||||
if (result == NO)
|
||||
{
|
||||
goto done;
|
||||
}
|
||||
|
||||
#ifdef HAVE_ICONV
|
||||
if (strict == NO
|
||||
&& enc != NSUTF8StringEncoding
|
||||
|
@ -1910,7 +1917,7 @@ GSFromUnicode(unsigned char **dst, unsigned int *size, const unichar *src,
|
|||
if (strict)
|
||||
{
|
||||
result = NO;
|
||||
break;
|
||||
goto done;
|
||||
}
|
||||
continue; // Skip invalid character.
|
||||
}
|
||||
|
@ -1923,7 +1930,7 @@ GSFromUnicode(unsigned char **dst, unsigned int *size, const unichar *src,
|
|||
if (strict)
|
||||
{
|
||||
result = NO;
|
||||
break;
|
||||
goto done;
|
||||
}
|
||||
continue; // At end.
|
||||
}
|
||||
|
@ -1941,7 +1948,7 @@ GSFromUnicode(unsigned char **dst, unsigned int *size, const unichar *src,
|
|||
if (strict)
|
||||
{
|
||||
result = NO;
|
||||
break;
|
||||
goto done;
|
||||
}
|
||||
continue; // Skip bad half of surrogate pair.
|
||||
}
|
||||
|
@ -2071,7 +2078,7 @@ bases:
|
|||
else
|
||||
{
|
||||
result = NO;
|
||||
break;
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2197,7 +2204,7 @@ tables:
|
|||
*/
|
||||
result = NO;
|
||||
spos = slen;
|
||||
break;
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -2238,7 +2245,7 @@ iconv_start:
|
|||
{
|
||||
NSLog(@"No iconv for encoding x%02x", enc);
|
||||
result = NO;
|
||||
break;
|
||||
goto done;
|
||||
}
|
||||
if (slen == 0)
|
||||
{
|
||||
|
@ -2250,7 +2257,7 @@ iconv_start:
|
|||
NSLog(@"No iconv for encoding %@ tried to use %s",
|
||||
GetEncodingName(enc), estr);
|
||||
result = NO;
|
||||
break;
|
||||
goto done;
|
||||
}
|
||||
|
||||
inbuf = (unsigned char*)src;
|
||||
|
@ -2287,7 +2294,7 @@ iconv_start:
|
|||
if (strict == YES)
|
||||
{
|
||||
result = NO;
|
||||
break;
|
||||
goto done;
|
||||
}
|
||||
/*
|
||||
* If we are allowing lossy conversion, we replace any
|
||||
|
@ -2304,7 +2311,7 @@ iconv_start:
|
|||
else
|
||||
{
|
||||
result = NO;
|
||||
break;
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
else if (strict == YES)
|
||||
|
@ -2315,7 +2322,7 @@ iconv_start:
|
|||
* so if we are doing strict conversions we must fail.
|
||||
*/
|
||||
result = NO;
|
||||
break;
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
} while (!done || rval != 0);
|
||||
|
@ -2324,10 +2331,12 @@ iconv_start:
|
|||
}
|
||||
#else
|
||||
result = NO;
|
||||
break;
|
||||
goto done;
|
||||
#endif
|
||||
}
|
||||
|
||||
done:
|
||||
|
||||
/*
|
||||
* Post conversion ... set output values.
|
||||
*/
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue