Commit fbc44f92 authored by Sam Lantinga's avatar Sam Lantinga

UTF-32 by definition can't handle characters higher than 0x10FFFF

--HG--
extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%401506
parent 3750cb6c
...@@ -669,7 +669,7 @@ size_t SDL_iconv(SDL_iconv_t cd, ...@@ -669,7 +669,7 @@ size_t SDL_iconv(SDL_iconv_t cd,
case ENCODING_UTF32BE: case ENCODING_UTF32BE:
{ {
Uint8 *p = (Uint8 *)dst; Uint8 *p = (Uint8 *)dst;
if ( ch > 0x7FFFFFFF ) { if ( ch > 0x10FFFF ) {
ch = UNKNOWN_UNICODE; ch = UNKNOWN_UNICODE;
} }
if ( dstlen < 4 ) { if ( dstlen < 4 ) {
...@@ -686,7 +686,7 @@ size_t SDL_iconv(SDL_iconv_t cd, ...@@ -686,7 +686,7 @@ size_t SDL_iconv(SDL_iconv_t cd,
case ENCODING_UTF32LE: case ENCODING_UTF32LE:
{ {
Uint8 *p = (Uint8 *)dst; Uint8 *p = (Uint8 *)dst;
if ( ch > 0x7FFFFFFF ) { if ( ch > 0x10FFFF ) {
ch = UNKNOWN_UNICODE; ch = UNKNOWN_UNICODE;
} }
if ( dstlen < 4 ) { if ( dstlen < 4 ) {
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
#include "SDL.h" #include "SDL.h"
static SDL_bool testutf16(char *data) static SDL_bool testutf1632(char *data)
{ {
Uint32 *p = (Uint32 *)data; Uint32 *p = (Uint32 *)data;
while(*p) { while(*p) {
...@@ -63,8 +63,10 @@ int main(int argc, char *argv[]) ...@@ -63,8 +63,10 @@ int main(int argc, char *argv[])
size_t len = (widelen(ucs4)+1)*4; size_t len = (widelen(ucs4)+1)*4;
for ( i = 0; i < SDL_arraysize(formats); ++i ) { for ( i = 0; i < SDL_arraysize(formats); ++i ) {
if ( (SDL_strncasecmp(formats[i], "UTF16", 5) == 0 || if ( (SDL_strncasecmp(formats[i], "UTF16", 5) == 0 ||
SDL_strncasecmp(formats[i], "UTF-16", 6) == 0) && SDL_strncasecmp(formats[i], "UTF-16", 6) == 0 ||
!testutf16(ucs4) ) { SDL_strncasecmp(formats[i], "UTF32", 5) == 0 ||
SDL_strncasecmp(formats[i], "UTF-32", 6) == 0) &&
!testutf1632(ucs4) ) {
continue; continue;
} }
test[0] = SDL_iconv_string(formats[i], "UCS-4", ucs4, len); test[0] = SDL_iconv_string(formats[i], "UCS-4", ucs4, len);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment