update buildroot to 2017.02.11
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
Don't build object files twice
|
||||
|
||||
When passed --enable-static and --enable-shared, icu will generate
|
||||
both a shared and a static version of its libraries.
|
||||
|
||||
However, in order to do so, it builds each and every object file
|
||||
twice: once with -fPIC (for the shared library), and once without
|
||||
-fPIC (for the static library). While admittedly building -fPIC for a
|
||||
static library generates a slightly suboptimal code, this is what all
|
||||
the autotools-based project are doing. They build each object file
|
||||
once, and they use it for both the static and shared libraries.
|
||||
|
||||
icu builds the object files for the shared library as .o files, and
|
||||
the object files for static library as .ao files. By simply changing
|
||||
the suffix of object files used for static libraries to ".o", we tell
|
||||
icu to use the ones built for the shared library (i.e, with -fPIC),
|
||||
and avoid the double build of icu.
|
||||
|
||||
On a fast build server, this brings the target icu build from
|
||||
3m41.302s down to 1m43.926s (approximate numbers: some other builds
|
||||
are running on the system at the same time).
|
||||
|
||||
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
|
||||
|
||||
Index: b/source/config/mh-linux
|
||||
===================================================================
|
||||
--- a/source/config/mh-linux
|
||||
+++ b/source/config/mh-linux
|
||||
@@ -35,7 +35,7 @@
|
||||
## Shared object suffix
|
||||
SO = so
|
||||
## Non-shared intermediate object suffix
|
||||
-STATIC_O = ao
|
||||
+STATIC_O = o
|
||||
|
||||
## Compilation rules
|
||||
%.$(STATIC_O): $(srcdir)/%.c
|
||||
@@ -0,0 +1,37 @@
|
||||
Workaround toolchain bugs
|
||||
|
||||
Many of ARM Sourcery CodeBench toolchain have a bug when compiling
|
||||
icu's translit.cpp source file. The bug is trigerred when there is a
|
||||
combination of "-W -Wall" and "-Os", and causes an internal compiler
|
||||
error. The bug has been reported to Mentor Graphics.
|
||||
|
||||
Even though it is clearly a toolchain bug, having a workaround for it
|
||||
is trivial in this case. So it will avoid our users falling into this
|
||||
internal compiler error, and allow our autobuilders to test more
|
||||
packages using this Sourcery CodeBench toolchain.qq
|
||||
|
||||
[Gustavo: update for ICU4C 54.1]
|
||||
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
|
||||
Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar>
|
||||
|
||||
diff -Nura icu.orig/source/configure icu/source/configure
|
||||
--- icu.orig/source/configure 2014-12-18 15:49:43.038628644 -0300
|
||||
+++ icu/source/configure 2014-12-18 15:51:23.183083232 -0300
|
||||
@@ -4323,7 +4323,7 @@
|
||||
;;
|
||||
esac
|
||||
|
||||
- CFLAGS="$CFLAGS -Wall -pedantic -Wshadow -Wpointer-arith -Wmissing-prototypes -Wwrite-strings"
|
||||
+ CFLAGS="$CFLAGS -pedantic -Wshadow -Wpointer-arith -Wmissing-prototypes -Wwrite-strings"
|
||||
else
|
||||
case "${host}" in
|
||||
*-*-cygwin)
|
||||
@@ -4337,7 +4337,7 @@
|
||||
fi
|
||||
if test "$GXX" = yes
|
||||
then
|
||||
- CXXFLAGS="$CXXFLAGS -W -Wall -pedantic -Wpointer-arith -Wwrite-strings -Wno-long-long"
|
||||
+ CXXFLAGS="$CXXFLAGS -pedantic -Wpointer-arith -Wwrite-strings -Wno-long-long"
|
||||
else
|
||||
case "${host}" in
|
||||
*-*-cygwin)
|
||||
@@ -0,0 +1,116 @@
|
||||
detect and add compiler symbol prefix to the assembly code
|
||||
|
||||
Some compiler, such as Blackfin GNU compiler, prefix a charater to any
|
||||
C symbol in generated assembly code. If any assembly symbol is invoked
|
||||
from C code, it needs to be prefixed as well.
|
||||
|
||||
Note: since autoreconf doesn't work with this package because automake
|
||||
isn't support
|
||||
|
||||
[Ryan: add information about why patching configure is ok]
|
||||
[Gustavo: update for ICU4C 54.1]
|
||||
|
||||
Signed-off-by: Sonic Zhang <sonic.zhang@analog.com>
|
||||
Signed-off-by: Ryan Barnett <rjbarnet@rockwellcollins.com>
|
||||
Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar>
|
||||
|
||||
diff -Nura icu.orig/source/configure icu/source/configure
|
||||
--- icu.orig/source/configure 2014-12-18 15:49:43.038628644 -0300
|
||||
+++ icu/source/configure 2014-12-18 15:56:05.793832186 -0300
|
||||
@@ -637,6 +637,7 @@
|
||||
ICUDATA_CHAR
|
||||
SAMPLES_TRUE
|
||||
TESTS_TRUE
|
||||
+SYMBOL_PREFIX
|
||||
ICULIBSUFFIXCNAME
|
||||
U_HAVE_LIB_SUFFIX
|
||||
ICULIBSUFFIX
|
||||
@@ -7414,6 +7415,17 @@
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CHECK_UTF16_STRING_RESULT" >&5
|
||||
$as_echo "$CHECK_UTF16_STRING_RESULT" >&6; }
|
||||
|
||||
+# Check compiler generated symbol profix
|
||||
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for symbol prefix" >&5
|
||||
+$as_echo "checking for symbol prefix... " >&6; }
|
||||
+ SYMBOL_PREFIX=`echo "PREFIX=__USER_LABEL_PREFIX__" \
|
||||
+ | ${CPP-${CC-gcc} -E} - 2>&1 \
|
||||
+ | ${EGREP-grep} "^PREFIX=" \
|
||||
+ | sed -e "s:^PREFIX=::" -e "s:__USER_LABEL_PREFIX__::"`
|
||||
+
|
||||
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SYMBOL_PREFIX" >&5
|
||||
+$as_echo "$SYMBOL_PREFIX" >&6; }
|
||||
+
|
||||
# Enable/disable extras
|
||||
# Check whether --enable-extras was given.
|
||||
if test "${enable_extras+set}" = set; then :
|
||||
diff -Nura icu.orig/source/data/Makefile.in icu/source/data/Makefile.in
|
||||
--- icu.orig/source/data/Makefile.in 2014-12-18 15:49:42.908624160 -0300
|
||||
+++ icu/source/data/Makefile.in 2014-12-18 16:01:32.751110913 -0300
|
||||
@@ -182,11 +182,11 @@
|
||||
packagedata: icupkg.inc $(PKGDATA_LIST) build-local
|
||||
ifneq ($(ENABLE_STATIC),)
|
||||
ifeq ($(PKGDATA_MODE),dll)
|
||||
- $(PKGDATA_INVOKE) $(PKGDATA) -e $(ICUDATA_ENTRY_POINT) -T $(OUTTMPDIR) -p $(ICUDATA_NAME) $(PKGDATA_LIBSTATICNAME) -m static $(PKGDATA_VERSIONING) $(PKGDATA_LIST)
|
||||
+ $(PKGDATA_INVOKE) $(PKGDATA) -e @SYMBOL_PREFIX@$(ICUDATA_ENTRY_POINT) -T $(OUTTMPDIR) -p $(ICUDATA_NAME) $(PKGDATA_LIBSTATICNAME) -m static $(PKGDATA_VERSIONING) $(PKGDATA_LIST)
|
||||
endif
|
||||
endif
|
||||
ifneq ($(ICUDATA_SOURCE_IS_NATIVE_TARGET),YES)
|
||||
- $(PKGDATA_INVOKE) $(PKGDATA) -e $(ICUDATA_ENTRY_POINT) -T $(OUTTMPDIR) -p $(ICUDATA_NAME) -m $(PKGDATA_MODE) $(PKGDATA_VERSIONING) $(PKGDATA_LIBNAME) $(PKGDATA_LIST)
|
||||
+ $(PKGDATA_INVOKE) $(PKGDATA) -e @SYMBOL_PREFIX@$(ICUDATA_ENTRY_POINT) -T $(OUTTMPDIR) -p $(ICUDATA_NAME) -m $(PKGDATA_MODE) $(PKGDATA_VERSIONING) $(PKGDATA_LIBNAME) $(PKGDATA_LIST)
|
||||
else
|
||||
$(INSTALL_DATA) $(ICUDATA_SOURCE_ARCHIVE) $(OUTDIR)
|
||||
endif
|
||||
@@ -209,11 +209,11 @@
|
||||
endif
|
||||
ifneq ($(ENABLE_STATIC),)
|
||||
ifeq ($(PKGDATA_MODE),dll)
|
||||
- $(PKGDATA_INVOKE) $(PKGDATA) -m static -e $(ICUDATA_ENTRY_POINT) -T $(OUTTMPDIR) -s $(BUILDDIR) -p $(ICUDATA_NAME) $(PKGDATA_LIBSTATICNAME) $(PKGDATA_LIST) -I $(ICUPKGDATA_INSTALL_LIBDIR)
|
||||
+ $(PKGDATA_INVOKE) $(PKGDATA) -m static -e @SYMBOL_PREFIX@$(ICUDATA_ENTRY_POINT) -T $(OUTTMPDIR) -s $(BUILDDIR) -p $(ICUDATA_NAME) $(PKGDATA_LIBSTATICNAME) $(PKGDATA_LIST) -I $(ICUPKGDATA_INSTALL_LIBDIR)
|
||||
endif
|
||||
endif
|
||||
ifneq ($(ICUDATA_SOURCE_IS_NATIVE_TARGET),YES)
|
||||
- $(PKGDATA_INVOKE) $(PKGDATA) -m $(PKGDATA_MODE) $(PKGDATA_VERSIONING) -e $(ICUDATA_ENTRY_POINT) -T $(OUTTMPDIR) -s $(BUILDDIR) -p $(ICUDATA_NAME) $(PKGDATA_LIBNAME) $(PKGDATA_LIST) -I $(ICUPKGDATA_INSTALL_DIR)
|
||||
+ $(PKGDATA_INVOKE) $(PKGDATA) -m $(PKGDATA_MODE) $(PKGDATA_VERSIONING) -e @SYMBOL_PREFIX@$(ICUDATA_ENTRY_POINT) -T $(OUTTMPDIR) -s $(BUILDDIR) -p $(ICUDATA_NAME) $(PKGDATA_LIBNAME) $(PKGDATA_LIST) -I $(ICUPKGDATA_INSTALL_DIR)
|
||||
else
|
||||
$(INSTALL_DATA) $(ICUDATA_SOURCE_ARCHIVE) $(DESTDIR)$(ICUPKGDATA_DIR)
|
||||
endif
|
||||
@@ -224,7 +224,7 @@
|
||||
#### 390 support
|
||||
install390: package390
|
||||
$(MKINSTALLDIRS) $(TMPDATADIR) $(DESTDIR)$(libdir)
|
||||
- $(INVOKE) $(PKGDATA) -s $(BUILDDIR)$(STUB_SUFFIX) -T $(OUTTMPDIR_390STUB) -p $(ICUDATA_NAME)$(STUB_SUFFIX) $(PKGDATA_LIBNAME)$(STUB_SUFFIX) -e $(ICUDATA_ENTRY_POINT) $(OS390LIST) -m dll $(PKGDATA_VERSIONING) -I $(DESTDIR)$(ICUPKGDATA_DIR)
|
||||
+ $(INVOKE) $(PKGDATA) -s $(BUILDDIR)$(STUB_SUFFIX) -T $(OUTTMPDIR_390STUB) -p $(ICUDATA_NAME)$(STUB_SUFFIX) $(PKGDATA_LIBNAME)$(STUB_SUFFIX) -e @SYMBOL_PREFIX@$(ICUDATA_ENTRY_POINT) $(OS390LIST) -m dll $(PKGDATA_VERSIONING) -I $(DESTDIR)$(ICUPKGDATA_DIR)
|
||||
ifeq ($(PKGDATA_MODE),dll)
|
||||
$(INSTALL-L) $(ICUPKGDATA_OUTDIR)/$(FINAL_IMPORT_LIB) $(DESTDIR)$(ICUPKGDATA_DIR)/$(FINAL_IMPORT_LIB)
|
||||
endif
|
||||
@@ -232,7 +232,7 @@
|
||||
#### $(LIB_ICUDATA_NAME)$(STUB_SUFFIX) is the subset data for batch mode
|
||||
package390: $(OUTTMPDIR)/icudata390.lst $(PKGDATA_LIST) ./icupkg.inc packagedata
|
||||
ln -s $(ICUDATA_NAME) $(OUTDIR)/build/$(ICUDATA_NAME)$(STUB_SUFFIX)
|
||||
- $(INVOKE) $(PKGDATA) -s $(BUILDDIR)$(STUB_SUFFIX) -T $(OUTTMPDIR_390STUB) -p $(ICUDATA_NAME)$(STUB_SUFFIX) $(PKGDATA_LIBNAME)$(STUB_SUFFIX) -e $(ICUDATA_ENTRY_POINT) $(OS390LIST) -m dll $(PKGDATA_VERSIONING)
|
||||
+ $(INVOKE) $(PKGDATA) -s $(BUILDDIR)$(STUB_SUFFIX) -T $(OUTTMPDIR_390STUB) -p $(ICUDATA_NAME)$(STUB_SUFFIX) $(PKGDATA_LIBNAME)$(STUB_SUFFIX) -e @SYMBOL_PREFIX@$(ICUDATA_ENTRY_POINT) $(OS390LIST) -m dll $(PKGDATA_VERSIONING)
|
||||
cp $(ICUPKGDATA_OUTDIR)/$(LIB_ICUDATA_NAME)$(STUB_SUFFIX).$(SO) $(top_builddir)/stubdata/$(LIB_ICUDATA_NAME)$(STUB_SUFFIX).$(SO)
|
||||
|
||||
|
||||
diff -Nura icu.orig/source/extra/uconv/Makefile.in icu/source/extra/uconv/Makefile.in
|
||||
--- icu.orig/source/extra/uconv/Makefile.in 2014-12-18 15:49:42.986626850 -0300
|
||||
+++ icu/source/extra/uconv/Makefile.in 2014-12-18 15:57:40.558101179 -0300
|
||||
@@ -58,7 +58,8 @@
|
||||
## Static mode
|
||||
ifeq ($(UCONVMSG_MODE),static)
|
||||
DEFS += -DUCONVMSG_LINK=$(MSGNAME)
|
||||
-UCONVMSG_LIB = $(RESDIR)/$(LIBPREFIX)$(STATIC_PREFIX_WHEN_USED)$(MSGNAME).$(A)
|
||||
+UCONVMSG_LIB = $(RESDIR)/$(LIBPREFIX)$(STATIC_PREFIX_WHEN_USED)@SYMBOL_PREFIX@$(MSGNAME).$(A)
|
||||
+
|
||||
LIBS += $(UCONVMSG_LIB)
|
||||
PKGMODE=static
|
||||
INSTALLTO=$(libdir)
|
||||
@@ -152,7 +153,7 @@
|
||||
endif
|
||||
|
||||
$(UCONVMSG_LIB): $(RESFILES) $(RESDIR)/$(RESDIR).lst pkgdata.inc
|
||||
- $(INVOKE) $(PKGDATA_INVOKE_OPTS) $(TOOLBINDIR)/pkgdata -p $(MSGNAME) $(PKGDATA_OPTS) -m $(PKGMODE) -s $(RESDIR) -d $(RESDIR) -T $(RESDIR) $(RESDIR)/$(RESDIR).lst
|
||||
+ $(INVOKE) $(PKGDATA_INVOKE_OPTS) $(TOOLBINDIR)/pkgdata -p @SYMBOL_PREFIX@$(MSGNAME) $(PKGDATA_OPTS) -m $(PKGMODE) -s $(RESDIR) -d $(RESDIR) -T $(RESDIR) $(RESDIR)/$(RESDIR).lst
|
||||
|
||||
$(RESDIR)/$(RESDIR).lst: Makefile $(srcdir)/resfiles.mk
|
||||
@-$(RMV) $@
|
||||
@@ -0,0 +1,35 @@
|
||||
From d5d0c4bb7cc9aa4a132ec0bea13255aee50c1cf9 Mon Sep 17 00:00:00 2001
|
||||
From: Maxime Hadjinlian <maxime.hadjinlian@devialet.com>
|
||||
Date: Fri, 6 Jun 2014 14:55:58 +0200
|
||||
Subject: [PATCH] Don't link icudata as a data only library
|
||||
|
||||
This patch cames straight from Debian. It fixes an issue when
|
||||
libicudata would not have some flags indicating it's EABIhf, causing
|
||||
applications linked against libicudata to not start on EABIhf
|
||||
systems. Getting rid of the -nodefaultlibs -nostdlib flags solves the
|
||||
problem, and is the solution that is used by Debian, see
|
||||
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=653457.
|
||||
|
||||
Signed-off-by: Maxime Hadjinlian <maxime.hadjinlian@devialet.com>
|
||||
---
|
||||
source/config/mh-linux | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/source/config/mh-linux b/source/config/mh-linux
|
||||
index 531a3b2..5a2a7c4 100644
|
||||
--- a/source/config/mh-linux
|
||||
+++ b/source/config/mh-linux
|
||||
@@ -21,7 +21,9 @@ LD_RPATH= -Wl,-zorigin,-rpath,'$$'ORIGIN
|
||||
LD_RPATH_PRE = -Wl,-rpath,
|
||||
|
||||
## These are the library specific LDFLAGS
|
||||
-LDFLAGSICUDT=-nodefaultlibs -nostdlib
|
||||
+#LDFLAGSICUDT=-nodefaultlibs -nostdlib
|
||||
+# Debian change: linking icudata as data only causes too many problems.
|
||||
+LDFLAGSICUDT=
|
||||
|
||||
## Compiler switch to embed a library name
|
||||
# The initial tab in the next line is to prevent icu-config from reading it.
|
||||
--
|
||||
2.0.0.rc2
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
From ffff12fd321c7a056e796e74cc508726b0626ae0 Mon Sep 17 00:00:00 2001
|
||||
From: Romain Naour <romain.naour@openwide.fr>
|
||||
Date: Wed, 22 Jul 2015 22:43:25 +0200
|
||||
Subject: [PATCH] fix static linking with icu-uc
|
||||
|
||||
During static linking with a C application and libicuuc.a,
|
||||
-lstdc++ is required.
|
||||
|
||||
Add -lstdc++ in Libs.private of icu-uc.pc.
|
||||
|
||||
Fixes:
|
||||
http://autobuild.buildroot.net/results/210/2107f9dfb39eeb6559fb4271c7af8b39aef521ca/
|
||||
|
||||
Signed-off-by: Romain Naour <romain.naour@openwide.fr>
|
||||
---
|
||||
source/Makefile.in | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/source/Makefile.in b/source/Makefile.in
|
||||
index 9db6c52..ca48e16 100644
|
||||
--- a/source/Makefile.in
|
||||
+++ b/source/Makefile.in
|
||||
@@ -264,7 +264,7 @@ config/icu-uc.pc: config/icu.pc Makefile icudefs.mk
|
||||
@echo "Description: $(PACKAGE_ICU_DESCRIPTION): Common and Data libraries" >> $@
|
||||
@echo "Name: $(PACKAGE)-uc" >> $@
|
||||
@echo "Libs:" '-L$${libdir}' "${ICULIBS_UC}" "${ICULIBS_DT}" >> $@
|
||||
- @echo "Libs.private:" '$${baselibs}' >> $@
|
||||
+ @echo "Libs.private:" '$${baselibs}' -lstdc++ >> $@
|
||||
@echo $@ updated.
|
||||
|
||||
config/icu-i18n.pc: config/icu.pc Makefile icudefs.mk
|
||||
--
|
||||
2.4.3
|
||||
|
||||
@@ -0,0 +1,173 @@
|
||||
ticket:12888 UText, problems with handling of bad UTF-8
|
||||
|
||||
Fixes:
|
||||
|
||||
CVE-2017-7867 - International Components for Unicode (ICU) for C/C++ before
|
||||
2017-02-13 has an out-of-bounds write caused by a heap-based buffer overflow
|
||||
related to the utf8TextAccess function in common/utext.cpp and the
|
||||
utext_setNativeIndex* function.
|
||||
|
||||
CVE-2017-7868 - International Components for Unicode (ICU) for C/C++ before
|
||||
2017-02-13 has an out-of-bounds write caused by a heap-based buffer overflow
|
||||
related to the utf8TextAccess function in common/utext.cpp and the
|
||||
utext_moveIndex32* function.
|
||||
|
||||
Upstream: http://bugs.icu-project.org/trac/changeset/39671
|
||||
|
||||
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
|
||||
|
||||
Index: /trunk/icu4c/source/common/utext.cpp
|
||||
===================================================================
|
||||
--- icu4c/source/common/utext.cpp (revision 39670)
|
||||
+++ icu4c/source/common/utext.cpp (revision 39671)
|
||||
@@ -848,7 +848,13 @@
|
||||
|
||||
// Chunk size.
|
||||
-// Must be less than 85, because of byte mapping from UChar indexes to native indexes.
|
||||
-// Worst case is three native bytes to one UChar. (Supplemenaries are 4 native bytes
|
||||
-// to two UChars.)
|
||||
+// Must be less than 42 (256/6), because of byte mapping from UChar indexes to native indexes.
|
||||
+// Worst case there are six UTF-8 bytes per UChar.
|
||||
+// obsolete 6 byte form fd + 5 trails maps to fffd
|
||||
+// obsolete 5 byte form fc + 4 trails maps to fffd
|
||||
+// non-shortest 4 byte forms maps to fffd
|
||||
+// normal supplementaries map to a pair of utf-16, two utf8 bytes per utf-16 unit
|
||||
+// mapToUChars array size must allow for the worst case, 6.
|
||||
+// This could be brought down to 4, by treating fd and fc as pure illegal,
|
||||
+// rather than obsolete lead bytes. But that is not compatible with the utf-8 access macros.
|
||||
//
|
||||
enum { UTF8_TEXT_CHUNK_SIZE=32 };
|
||||
@@ -890,5 +896,5 @@
|
||||
// one for a supplementary starting in the last normal position,
|
||||
// and one for an entry for the buffer limit position.
|
||||
- uint8_t mapToUChars[UTF8_TEXT_CHUNK_SIZE*3+6]; // Map native offset from bufNativeStart to
|
||||
+ uint8_t mapToUChars[UTF8_TEXT_CHUNK_SIZE*6+6]; // Map native offset from bufNativeStart to
|
||||
// correspoding offset in filled part of buf.
|
||||
int32_t align;
|
||||
@@ -1033,4 +1039,5 @@
|
||||
u8b = (UTF8Buf *)ut->p; // the current buffer
|
||||
mapIndex = ix - u8b->toUCharsMapStart;
|
||||
+ U_ASSERT(mapIndex < (int32_t)sizeof(UTF8Buf::mapToUChars));
|
||||
ut->chunkOffset = u8b->mapToUChars[mapIndex] - u8b->bufStartIdx;
|
||||
return TRUE;
|
||||
@@ -1299,4 +1306,8 @@
|
||||
// If index is at the end, there is no character there to look at.
|
||||
if (ix != ut->b) {
|
||||
+ // Note: this function will only move the index back if it is on a trail byte
|
||||
+ // and there is a preceding lead byte and the sequence from the lead
|
||||
+ // through this trail could be part of a valid UTF-8 sequence
|
||||
+ // Otherwise the index remains unchanged.
|
||||
U8_SET_CP_START(s8, 0, ix);
|
||||
}
|
||||
@@ -1312,5 +1323,8 @@
|
||||
uint8_t *mapToNative = u8b->mapToNative;
|
||||
uint8_t *mapToUChars = u8b->mapToUChars;
|
||||
- int32_t toUCharsMapStart = ix - (UTF8_TEXT_CHUNK_SIZE*3 + 1);
|
||||
+ int32_t toUCharsMapStart = ix - sizeof(UTF8Buf::mapToUChars) + 1;
|
||||
+ // Note that toUCharsMapStart can be negative. Happens when the remaining
|
||||
+ // text from current position to the beginning is less than the buffer size.
|
||||
+ // + 1 because mapToUChars must have a slot at the end for the bufNativeLimit entry.
|
||||
int32_t destIx = UTF8_TEXT_CHUNK_SIZE+2; // Start in the overflow region
|
||||
// at end of buffer to leave room
|
||||
@@ -1339,4 +1353,5 @@
|
||||
// Special case ASCII range for speed.
|
||||
buf[destIx] = (UChar)c;
|
||||
+ U_ASSERT(toUCharsMapStart <= srcIx);
|
||||
mapToUChars[srcIx - toUCharsMapStart] = (uint8_t)destIx;
|
||||
mapToNative[destIx] = (uint8_t)(srcIx - toUCharsMapStart);
|
||||
@@ -1368,4 +1383,5 @@
|
||||
mapToUChars[sIx-- - toUCharsMapStart] = (uint8_t)destIx;
|
||||
} while (sIx >= srcIx);
|
||||
+ U_ASSERT(toUCharsMapStart <= (srcIx+1));
|
||||
|
||||
// Set native indexing limit to be the current position.
|
||||
@@ -1542,4 +1558,5 @@
|
||||
U_ASSERT(index<=ut->chunkNativeLimit);
|
||||
int32_t mapIndex = index - u8b->toUCharsMapStart;
|
||||
+ U_ASSERT(mapIndex < (int32_t)sizeof(UTF8Buf::mapToUChars));
|
||||
int32_t offset = u8b->mapToUChars[mapIndex] - u8b->bufStartIdx;
|
||||
U_ASSERT(offset>=0 && offset<=ut->chunkLength);
|
||||
Index: /trunk/icu4c/source/test/intltest/utxttest.cpp
|
||||
===================================================================
|
||||
--- icu4c/source/test/intltest/utxttest.cpp (revision 39670)
|
||||
+++ icu4c/source/test/intltest/utxttest.cpp (revision 39671)
|
||||
@@ -68,4 +68,6 @@
|
||||
case 7: name = "Ticket12130";
|
||||
if (exec) Ticket12130(); break;
|
||||
+ case 8: name = "Ticket12888";
|
||||
+ if (exec) Ticket12888(); break;
|
||||
default: name = ""; break;
|
||||
}
|
||||
@@ -1584,2 +1586,62 @@
|
||||
utext_close(&ut);
|
||||
}
|
||||
+
|
||||
+// Ticket 12888: bad handling of illegal utf-8 containing many instances of the archaic, now illegal,
|
||||
+// six byte utf-8 forms. Original implementation had an assumption that
|
||||
+// there would be at most three utf-8 bytes per UTF-16 code unit.
|
||||
+// The five and six byte sequences map to a single replacement character.
|
||||
+
|
||||
+void UTextTest::Ticket12888() {
|
||||
+ const char *badString =
|
||||
+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
|
||||
+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
|
||||
+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
|
||||
+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
|
||||
+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
|
||||
+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
|
||||
+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
|
||||
+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
|
||||
+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
|
||||
+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
|
||||
+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
|
||||
+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
|
||||
+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
|
||||
+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
|
||||
+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
|
||||
+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
|
||||
+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
|
||||
+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
|
||||
+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"
|
||||
+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80";
|
||||
+
|
||||
+ UErrorCode status = U_ZERO_ERROR;
|
||||
+ LocalUTextPointer ut(utext_openUTF8(NULL, badString, -1, &status));
|
||||
+ TEST_SUCCESS(status);
|
||||
+ for (;;) {
|
||||
+ UChar32 c = utext_next32(ut.getAlias());
|
||||
+ if (c == U_SENTINEL) {
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ int32_t endIdx = utext_getNativeIndex(ut.getAlias());
|
||||
+ if (endIdx != (int32_t)strlen(badString)) {
|
||||
+ errln("%s:%d expected=%d, actual=%d", __FILE__, __LINE__, strlen(badString), endIdx);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ for (int32_t prevIndex = endIdx; prevIndex>0;) {
|
||||
+ UChar32 c = utext_previous32(ut.getAlias());
|
||||
+ int32_t currentIndex = utext_getNativeIndex(ut.getAlias());
|
||||
+ if (c != 0xfffd) {
|
||||
+ errln("%s:%d (expected, actual, index) = (%d, %d, %d)\n",
|
||||
+ __FILE__, __LINE__, 0xfffd, c, currentIndex);
|
||||
+ break;
|
||||
+ }
|
||||
+ if (currentIndex != prevIndex - 6) {
|
||||
+ errln("%s:%d: wrong index. Expected, actual = %d, %d",
|
||||
+ __FILE__, __LINE__, prevIndex - 6, currentIndex);
|
||||
+ break;
|
||||
+ }
|
||||
+ prevIndex = currentIndex;
|
||||
+ }
|
||||
+}
|
||||
Index: /trunk/icu4c/source/test/intltest/utxttest.h
|
||||
===================================================================
|
||||
--- icu4c/source/test/intltest/utxttest.h (revision 39670)
|
||||
+++ icu4c/source/test/intltest/utxttest.h (revision 39671)
|
||||
@@ -39,4 +39,5 @@
|
||||
void Ticket10983();
|
||||
void Ticket12130();
|
||||
+ void Ticket12888();
|
||||
|
||||
private:
|
||||
31
bsp/buildroot-2017.02.11/package/icu/Config.in
Normal file
31
bsp/buildroot-2017.02.11/package/icu/Config.in
Normal file
@@ -0,0 +1,31 @@
|
||||
config BR2_PACKAGE_ICU
|
||||
bool "icu"
|
||||
depends on BR2_INSTALL_LIBSTDCPP
|
||||
depends on BR2_USE_WCHAR
|
||||
depends on BR2_TOOLCHAIN_HAS_THREADS
|
||||
# icu does some funky things by generating by itself an ELF
|
||||
# file, and it cannot easily be changed to generate FLAT
|
||||
# format.
|
||||
depends on !BR2_BINFMT_FLAT
|
||||
help
|
||||
International Components for Unicode.
|
||||
|
||||
http://site.icu-project.org/
|
||||
|
||||
if BR2_PACKAGE_ICU
|
||||
|
||||
config BR2_PACKAGE_ICU_CUSTOM_DATA_PATH
|
||||
string "Path to custom data library file"
|
||||
help
|
||||
This option allows to define the path to a custom data
|
||||
library generated with http://apps.icu-project.org/datacustom/
|
||||
Make sure you select the appropiate version to match the one
|
||||
provided by buildroot.
|
||||
Leave empty to not use this functionality.
|
||||
|
||||
endif
|
||||
|
||||
comment "icu needs a toolchain w/ C++, wchar, threads"
|
||||
depends on !BR2_BINFMT_FLAT
|
||||
depends on !BR2_INSTALL_LIBSTDCPP || !BR2_USE_WCHAR || \
|
||||
!BR2_TOOLCHAIN_HAS_THREADS
|
||||
4
bsp/buildroot-2017.02.11/package/icu/icu.hash
Normal file
4
bsp/buildroot-2017.02.11/package/icu/icu.hash
Normal file
@@ -0,0 +1,4 @@
|
||||
# From https://ssl.icu-project.org/files/icu4c/57.1/icu4c-src-58_2.md5
|
||||
md5 fac212b32b7ec7ab007a12dff1f3aea1 icu4c-58_2-src.tgz
|
||||
# Calculated based on the hash above
|
||||
sha256 2b0a4410153a9b20de0e20c7d8b66049a72aef244b53683d0d7521371683da0c icu4c-58_2-src.tgz
|
||||
60
bsp/buildroot-2017.02.11/package/icu/icu.mk
Normal file
60
bsp/buildroot-2017.02.11/package/icu/icu.mk
Normal file
@@ -0,0 +1,60 @@
|
||||
################################################################################
|
||||
#
|
||||
# icu
|
||||
#
|
||||
################################################################################
|
||||
|
||||
ICU_VERSION = 58.2
|
||||
ICU_SOURCE = icu4c-$(subst .,_,$(ICU_VERSION))-src.tgz
|
||||
ICU_SITE = http://download.icu-project.org/files/icu4c/$(ICU_VERSION)
|
||||
ICU_LICENSE = ICU License
|
||||
ICU_LICENSE_FILES = LICENSE
|
||||
|
||||
ICU_DEPENDENCIES = host-icu
|
||||
ICU_INSTALL_STAGING = YES
|
||||
ICU_CONFIG_SCRIPTS = icu-config
|
||||
ICU_CONF_OPTS = \
|
||||
--with-cross-build=$(HOST_ICU_DIR)/source \
|
||||
--disable-samples \
|
||||
--disable-tests
|
||||
|
||||
# When available, icu prefers to use C++11 atomics, which rely on the
|
||||
# __atomic builtins. On certain architectures, this requires linking
|
||||
# with libatomic starting from gcc 4.8.
|
||||
ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y)
|
||||
ICU_CONF_ENV += LIBS="-latomic"
|
||||
endif
|
||||
|
||||
# strtod_l() is not supported by musl; also xlocale.h is missing
|
||||
ifeq ($(BR2_TOOLCHAIN_USES_MUSL),y)
|
||||
ICU_CONF_ENV += ac_cv_func_strtod_l=no
|
||||
endif
|
||||
|
||||
HOST_ICU_CONF_OPTS = \
|
||||
--disable-samples \
|
||||
--disable-tests \
|
||||
--disable-extras \
|
||||
--disable-icuio \
|
||||
--disable-layout \
|
||||
--disable-renaming
|
||||
ICU_SUBDIR = source
|
||||
HOST_ICU_SUBDIR = source
|
||||
|
||||
ICU_CUSTOM_DATA_PATH = $(call qstrip,$(BR2_PACKAGE_ICU_CUSTOM_DATA_PATH))
|
||||
|
||||
ifneq ($(ICU_CUSTOM_DATA_PATH),)
|
||||
define ICU_COPY_CUSTOM_DATA
|
||||
cp $(ICU_CUSTOM_DATA_PATH) $(@D)/source/data/in/
|
||||
endef
|
||||
ICU_POST_PATCH_HOOKS += ICU_COPY_CUSTOM_DATA
|
||||
endif
|
||||
|
||||
define ICU_REMOVE_DEV_FILES
|
||||
rm -f $(addprefix $(TARGET_DIR)/usr/bin/,derb genbrk gencfu gencnval gendict genrb icuinfo makeconv uconv)
|
||||
rm -f $(addprefix $(TARGET_DIR)/usr/sbin/,genccode gencmn gennorm2 gensprep icupkg)
|
||||
rm -rf $(TARGET_DIR)/usr/share/icu
|
||||
endef
|
||||
ICU_POST_INSTALL_TARGET_HOOKS += ICU_REMOVE_DEV_FILES
|
||||
|
||||
$(eval $(autotools-package))
|
||||
$(eval $(host-autotools-package))
|
||||
Reference in New Issue
Block a user