Mercurial > sdl-ios-xcode
view Makefile.in @ 3539:f2846bf19360
Fixed bug #896
John Popplewell 2009-12-08 23:05:50 PST
Originally reported by AKFoerster on the mailing list.
Error decoding UTF8 Russian text to UTF-16LE on Windows, but specifically on
platforms without iconv support (the default on Windows).
Valid UTF8 characters are flagged as being overlong and then substituted by the
UNKNOWN_UNICODE character.
After studying the testiconv.c example program, reading the RFCs and putting
some printf statements in SDL_iconv.c the problem is in a test for 'Maximum
overlong sequences', specifically 4.2.1, which is carried out by the following
code:
} else if ( p[0] >= 0xC0 ) {
if ( (p[0] & 0xE0) != 0xC0 ) {
/* Skip illegal sequences
return SDL_ICONV_EILSEQ;
*/
ch = UNKNOWN_UNICODE;
} else {
if ( (p[0] & 0xCE) == 0xC0 ) { <<<<<<<< here
overlong = SDL_TRUE;
}
ch = (Uint32)(p[0] & 0x1F);
left = 1;
}
} else {
Here is the 2-byte encoding of a character in range 00000080 - 000007FF
110xxxxx 10xxxxxx
The line in question is supposed to be checking for an overlong sequence which
would be less than
11000001 10111111
which should be represented as a single byte.
BUT, the mask value (0xCE) is wrong, it isn't checking the top-most bit:
11000001 value
11001110 mask (incorrect)
^
and should be (0xDE):
11000001 value
11011110 mask (correct)
making the above code:
} else if ( p[0] >= 0xC0 ) {
if ( (p[0] & 0xE0) != 0xC0 ) {
/* Skip illegal sequences
return SDL_ICONV_EILSEQ;
*/
ch = UNKNOWN_UNICODE;
} else {
if ( (p[0] & 0xDE) == 0xC0 ) { <<<<<<<< here
overlong = SDL_TRUE;
}
ch = (Uint32)(p[0] & 0x1F);
left = 1;
}
} else {
I can supply a test program and/or a patch if required,
best regards,
John Popplewell
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Fri, 11 Dec 2009 08:03:43 +0000 |
parents | 48caa67fac25 |
children | 61eab53fd6fe |
line wrap: on
line source
# Makefile to build and install the SDL library top_builddir = . srcdir = @srcdir@ objects = build prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ libdir = @libdir@ includedir = @includedir@ datarootdir = @datarootdir@ datadir = @datadir@ auxdir = @ac_aux_dir@ distpath = $(srcdir)/.. distdir = SDL-@SDL_VERSION@ distfile = $(distdir).tar.gz @SET_MAKE@ SHELL = @SHELL@ CC = @CC@ INCLUDE = @INCLUDE@ CFLAGS = @BUILD_CFLAGS@ EXTRA_CFLAGS = @EXTRA_CFLAGS@ LDFLAGS = @BUILD_LDFLAGS@ EXTRA_LDFLAGS = @EXTRA_LDFLAGS@ LIBTOOL = @LIBTOOL@ INSTALL = @INSTALL@ NASM = @NASM@ @NASMFLAGS@ AR = @AR@ RANLIB = @RANLIB@ WINDRES = @WINDRES@ TARGET = libSDL.la OBJECTS = @OBJECTS@ VERSION_OBJECTS = @VERSION_OBJECTS@ SDLMAIN_TARGET = libSDLmain.a SDLMAIN_OBJECTS = @SDLMAIN_OBJECTS@ # PS3 SPU programs SPU_GCC = @SPU_GCC@ EMBEDSPU = @EMBEDSPU@ #include $(srcdir)/src/video/ps3/spulibs/Makefile DIST = acinclude autogen.sh Borland.html Borland.zip BUGS build-scripts configure configure.in COPYING CREDITS docs.html include INSTALL Makefile.minimal Makefile.in README* sdl-config.in sdl.m4 sdl.pc.in SDL.spec SDL.spec.in src test TODO VisualC.html VisualC VisualCE Watcom-Win32.zip WhatsNew Xcode HDRS = SDL.h SDL_atomic.h SDL_audio.h SDL_compat.h SDL_cpuinfo.h SDL_endian.h SDL_error.h SDL_events.h SDL_haptic.h SDL_joystick.h SDL_keyboard.h SDL_keysym.h SDL_loadso.h SDL_main.h SDL_mouse.h SDL_mutex.h SDL_name.h SDL_opengl.h SDL_opengles.h SDL_pixels.h SDL_platform.h SDL_power.h SDL_quit.h SDL_rect.h SDL_revision.h SDL_rwops.h SDL_scancode.h SDL_stdinc.h SDL_surface.h SDL_syswm.h SDL_thread.h SDL_timer.h SDL_types.h SDL_version.h SDL_video.h begin_code.h close_code.h LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_RELEASE = @LT_RELEASE@ LT_REVISION = @LT_REVISION@ LT_LDFLAGS = -no-undefined -rpath $(DESTDIR)$(libdir) -release $(LT_RELEASE) -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) all: $(srcdir)/configure Makefile $(objects) $(objects)/$(TARGET) $(objects)/$(SDLMAIN_TARGET) $(srcdir)/configure: $(srcdir)/configure.in @echo "Warning, configure.in is out of date" #(cd $(srcdir) && sh autogen.sh && sh configure) @sleep 3 Makefile: $(srcdir)/Makefile.in $(SHELL) config.status $@ Makefile.in:; $(objects): $(SHELL) $(auxdir)/mkinstalldirs $@ # To make sure parallel builds will not fail $(srcdir)/include/SDL_revision.h: update-revision update-revision: $(SHELL) $(auxdir)/updaterev.sh .PHONY: all update-revision install install-bin install-hdrs install-lib install-data uninstall uninstall-bin uninstall-hdrs uninstall-lib uninstall-data clean distclean dist $(OBJECTS:.lo=.d) -include $(OBJECTS:.lo=.d) @DEPENDS@ @VERSION_DEPENDS@ @SDLMAIN_DEPENDS@ $(objects)/$(TARGET): $(OBJECTS) $(VERSION_OBJECTS) $(LIBTOOL) --mode=link $(CC) -o $@ $(OBJECTS) $(VERSION_OBJECTS) $(LDFLAGS) $(EXTRA_LDFLAGS) $(LT_LDFLAGS) $(objects)/$(SDLMAIN_TARGET): $(SDLMAIN_OBJECTS) $(AR) cru $@ $(SDLMAIN_OBJECTS) $(RANLIB) $@ install: all install-bin install-hdrs install-lib install-data install-bin: $(SHELL) $(auxdir)/mkinstalldirs $(DESTDIR)$(bindir) $(INSTALL) -m 755 sdl-config $(DESTDIR)$(bindir)/sdl-config install-hdrs: $(SHELL) $(auxdir)/mkinstalldirs $(DESTDIR)$(includedir)/SDL for file in $(HDRS); do \ $(INSTALL) -m 644 $(srcdir)/include/$$file $(DESTDIR)$(includedir)/SDL/$$file; \ done $(INSTALL) -m 644 include/SDL_config.h $(DESTDIR)$(includedir)/SDL/SDL_config.h install-lib: $(objects) $(objects)/$(TARGET) $(objects)/$(SDLMAIN_TARGET) $(SHELL) $(auxdir)/mkinstalldirs $(DESTDIR)$(libdir) $(LIBTOOL) --mode=install $(INSTALL) $(objects)/$(TARGET) $(DESTDIR)$(libdir)/$(TARGET) $(INSTALL) -m 644 $(objects)/$(SDLMAIN_TARGET) $(DESTDIR)$(libdir)/$(SDLMAIN_TARGET) $(RANLIB) $(DESTDIR)$(libdir)/$(SDLMAIN_TARGET) install-data: $(SHELL) $(auxdir)/mkinstalldirs $(DESTDIR)$(datadir)/aclocal $(INSTALL) -m 644 $(srcdir)/sdl.m4 $(DESTDIR)$(datadir)/aclocal/sdl.m4 $(SHELL) $(auxdir)/mkinstalldirs $(DESTDIR)$(libdir)/pkgconfig $(INSTALL) -m 644 sdl.pc $(DESTDIR)$(libdir)/pkgconfig uninstall: uninstall-bin uninstall-hdrs uninstall-lib uninstall-data uninstall-bin: rm -f $(DESTDIR)$(bindir)/sdl-config uninstall-hdrs: for file in $(HDRS); do \ rm -f $(DESTDIR)$(includedir)/SDL/$$file; \ done rm -f $(DESTDIR)$(includedir)/SDL/SDL_config.h -rmdir $(DESTDIR)$(includedir)/SDL uninstall-lib: $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$(TARGET) rm -f $(DESTDIR)$(libdir)/$(SDLMAIN_TARGET) uninstall-data: rm -f $(DESTDIR)$(datadir)/aclocal/sdl.m4 rm -f $(DESTDIR)$(libdir)/pkgconfig/sdl.pc clean: rm -rf $(objects) if test -f test/Makefile; then (cd test; $(MAKE) $@); fi distclean: clean rm -f Makefile include/SDL_config.h sdl-config rm -f SDL.qpg rm -f config.status config.cache config.log libtool rm -rf $(srcdir)/autom4te* find $(srcdir) \( \ -name '*~' -o \ -name '*.bak' -o \ -name '*.old' -o \ -name '*.rej' -o \ -name '*.orig' -o \ -name '.#*' \) \ -exec rm -f {} \; cp $(srcdir)/include/SDL_config.h.default $(srcdir)/include/SDL_config.h if test -f test/Makefile; then (cd test; $(MAKE) $@); fi dist $(distfile): $(SHELL) $(auxdir)/mkinstalldirs $(distdir) tar cf - $(DIST) | (cd $(distdir); tar xf -) cp $(distdir)/include/SDL_config.h.default $(distdir)/include/SDL_config.h $(SHELL) $(distdir)/build-scripts/updaterev.sh rm -rf `find $(distdir) -name .svn` find $(distdir) \( \ -name '*~' -o \ -name '*.bak' -o \ -name '*.old' -o \ -name '*.rej' -o \ -name '*.orig' -o \ -name '.#*' \) \ -exec rm -f {} \; if test -f $(distdir)/test/Makefile; then (cd $(distdir)/test && make distclean); fi tar cvf - $(distdir) | gzip --best >$(distfile) rm -rf $(distdir) rpm: $(distfile) rpmbuild -ta $? # Run indent on the source to standardize coding style indent: @echo "Running indent... modified files:" @cd $(srcdir) && \ find . \( \ -name '*.h' -o \ -name '*.c' -o \ -name '*.cc' \) \ -print | fgrep -v ./Xcode | \ while read file; do \ indent "$$file" -o "$$file.indent"; \ if cmp "$$file" "$$file.indent" >/dev/null; then \ rm -f "$$file.indent"; \ else \ echo "$$file"; \ mv -f "$$file.indent" "$$file"; \ fi; \ done # Run indent and then commit modified files commit: indent svn commit # Create a SVN snapshot that people can run update on snapshot: $(SHELL) $(auxdir)/snapshot.sh