From 1203178ea657d17926787a5b13fed23d592edde7 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Mon, 13 Mar 2006 01:16:16 +0000 Subject: [PATCH] UTF-32 by definition can't handle characters higher than 0x10FFFF --- src/stdlib/SDL_iconv.c | 4 ++-- test/testiconv.c | 8 +++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/stdlib/SDL_iconv.c b/src/stdlib/SDL_iconv.c index 517f7b791..ab2c7666e 100644 --- a/src/stdlib/SDL_iconv.c +++ b/src/stdlib/SDL_iconv.c @@ -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 ) { diff --git a/test/testiconv.c b/test/testiconv.c index 62bda5c55..bf9decbd7 100644 --- a/test/testiconv.c +++ b/test/testiconv.c @@ -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);