UTF-32 by definition can't handle characters higher than 0x10FFFF
--HG-- extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%401506
This commit is contained in:
parent
3750cb6c4d
commit
fbc44f92d6
2 changed files with 7 additions and 5 deletions
|
@ -669,7 +669,7 @@ size_t SDL_iconv(SDL_iconv_t cd,
|
|||
case ENCODING_UTF32BE:
|
||||
{
|
||||
Uint8 *p = (Uint8 *)dst;
|
||||
if ( ch > 0x7FFFFFFF ) {
|
||||
if ( ch > 0x10FFFF ) {
|
||||
ch = UNKNOWN_UNICODE;
|
||||
}
|
||||
if ( dstlen < 4 ) {
|
||||
|
@ -686,7 +686,7 @@ size_t SDL_iconv(SDL_iconv_t cd,
|
|||
case ENCODING_UTF32LE:
|
||||
{
|
||||
Uint8 *p = (Uint8 *)dst;
|
||||
if ( ch > 0x7FFFFFFF ) {
|
||||
if ( ch > 0x10FFFF ) {
|
||||
ch = UNKNOWN_UNICODE;
|
||||
}
|
||||
if ( dstlen < 4 ) {
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
#include "SDL.h"
|
||||
|
||||
static SDL_bool testutf16(char *data)
|
||||
static SDL_bool testutf1632(char *data)
|
||||
{
|
||||
Uint32 *p = (Uint32 *)data;
|
||||
while(*p) {
|
||||
|
@ -63,8 +63,10 @@ int main(int argc, char *argv[])
|
|||
size_t len = (widelen(ucs4)+1)*4;
|
||||
for ( i = 0; i < SDL_arraysize(formats); ++i ) {
|
||||
if ( (SDL_strncasecmp(formats[i], "UTF16", 5) == 0 ||
|
||||
SDL_strncasecmp(formats[i], "UTF-16", 6) == 0) &&
|
||||
!testutf16(ucs4) ) {
|
||||
SDL_strncasecmp(formats[i], "UTF-16", 6) == 0 ||
|
||||
SDL_strncasecmp(formats[i], "UTF32", 5) == 0 ||
|
||||
SDL_strncasecmp(formats[i], "UTF-32", 6) == 0) &&
|
||||
!testutf1632(ucs4) ) {
|
||||
continue;
|
||||
}
|
||||
test[0] = SDL_iconv_string(formats[i], "UCS-4", ucs4, len);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue