diff options
Diffstat (limited to 'external/poky/meta/recipes-support/icu')
9 files changed, 271 insertions, 76 deletions
diff --git a/external/poky/meta/recipes-support/icu/icu.inc b/external/poky/meta/recipes-support/icu/icu.inc index e20085fb..670cbedb 100644 --- a/external/poky/meta/recipes-support/icu/icu.inc +++ b/external/poky/meta/recipes-support/icu/icu.inc @@ -35,13 +35,6 @@ TARGET_CXXFLAGS_append = "${@oe.utils.conditional('SITEINFO_ENDIANNESS', 'be', ' ASNEEDED = "" -# strtod_l() is not supported by musl; also xlocale.h is missing -# It is not possible to disable its use via configure switches or env vars -# so monkey patching is needed. -do_configure_prepend_libc-musl () { - sed -i -e 's,DU_HAVE_STRTOD_L=1,DU_HAVE_STRTOD_L=0,' ${S}/configure.ac -} - do_compile_prepend_class-target () { # Make sure certain build host references do not end up being compiled # in the image. This only affects libicutu and icu-dbg @@ -66,7 +59,9 @@ do_install_append_class-target() { # Use icupkg to re-generate it. if [ "${SITEINFO_ENDIANNESS}" = "be" ] ; then rm -f ${D}/${datadir}/${BPN}/${PV}/icudt${ICU_MAJOR_VER}b.dat - icupkg -tb ${S}/data/in/icudt${ICU_MAJOR_VER}l.dat ${D}/${datadir}/${BPN}/${PV}/icudt${ICU_MAJOR_VER}b.dat + if [ -f ${S}/data/in/icudt${ICU_MAJOR_VER}l.dat ]; then + icupkg -tb ${S}/data/in/icudt${ICU_MAJOR_VER}l.dat ${D}/${datadir}/${BPN}/${PV}/icudt${ICU_MAJOR_VER}b.dat + fi fi # Remove build host references... diff --git a/external/poky/meta/recipes-support/icu/icu/0001-Fix-big-endian-build.patch b/external/poky/meta/recipes-support/icu/icu/0001-Fix-big-endian-build.patch new file mode 100644 index 00000000..91d68848 --- /dev/null +++ b/external/poky/meta/recipes-support/icu/icu/0001-Fix-big-endian-build.patch @@ -0,0 +1,28 @@ +From 9be0b489a94b57419202c552022f25cb95bfac51 Mon Sep 17 00:00:00 2001 +From: Alexander Kanavin <alex.kanavin@gmail.com> +Date: Wed, 17 Apr 2019 16:41:58 +0200 +Subject: [PATCH] Fix big-endian build + +Bug-report: https://unicode-org.atlassian.net/browse/ICU-20533 +Patch taken from: https://bugs.gentoo.org/682170 + +it is applied upstream and will be in version 67+ + +Upstream-Status: Backport [https://github.com/unicode-org/icu/commit/4a3a457b38cd828b7b3fa4fdbc6e2504a57275e9] +Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com> +--- + data/Makefile.in | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/data/Makefile.in ++++ b/data/Makefile.in +@@ -148,7 +148,8 @@ ICUDATA_ARCHIVE = $(firstword $(wildcard + # and convert it to the current type.
+ ifneq ($(ICUDATA_ARCHIVE),)
+ ICUDATA_SOURCE_ARCHIVE = $(OUTDIR)/$(ICUDATA_PLATFORM_NAME).dat
+-$(ICUDATA_SOURCE_ARCHIVE): $(ICUDATA_ARCHIVE) $(OUTDIR)
++$(ICUDATA_SOURCE_ARCHIVE): $(ICUDATA_ARCHIVE)
++ $(MKINSTALLDIRS) $(OUTDIR)
+ $(INVOKE) $(TOOLBINDIR)/icupkg -t$(ICUDATA_CHAR) $(ICUDATA_ARCHIVE) $(ICUDATA_SOURCE_ARCHIVE)
+ endif
+ else
diff --git a/external/poky/meta/recipes-support/icu/icu/0001-icu-Added-armeb-support.patch b/external/poky/meta/recipes-support/icu/icu/0001-icu-Added-armeb-support.patch new file mode 100644 index 00000000..299689d9 --- /dev/null +++ b/external/poky/meta/recipes-support/icu/icu/0001-icu-Added-armeb-support.patch @@ -0,0 +1,30 @@ +From 500321387ceca48934bb0f323779117cd518bab6 Mon Sep 17 00:00:00 2001 +From: Lei Maohui <leimaohui@cn.fujitsu.com> +Date: Wed, 8 May 2019 14:42:30 +0900 +Subject: [PATCH] icu: Added armeb support. + +Make icu support arm32 BE. + +Upstream-Status: Pending + +Signed-off-by: Lei Maohui <leimaohui@cn.fujitsu.com> +--- + i18n/double-conversion-utils.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/i18n/double-conversion-utils.h b/i18n/double-conversion-utils.h +index 1e44fca..e4f2a8b 100644 +--- a/i18n/double-conversion-utils.h ++++ b/i18n/double-conversion-utils.h +@@ -92,7 +92,7 @@ int main(int argc, char** argv) { + // + // If it prints "correct" then the architecture should be here, in the "correct" section. + #if defined(_M_X64) || defined(__x86_64__) || \ +- defined(__ARMEL__) || defined(__avr32__) || defined(_M_ARM) || defined(_M_ARM64) || \ ++ defined(__arm__) || defined(__avr32__) || defined(_M_ARM) || defined(_M_ARM64) || \ + defined(__hppa__) || defined(__ia64__) || \ + defined(__mips__) || \ + defined(__powerpc__) || defined(__ppc__) || defined(__ppc64__) || \ +-- +2.7.4 + diff --git a/external/poky/meta/recipes-support/icu/icu/0002-Add-ARC-support.patch b/external/poky/meta/recipes-support/icu/icu/0002-Add-ARC-support.patch deleted file mode 100644 index 20e3d835..00000000 --- a/external/poky/meta/recipes-support/icu/icu/0002-Add-ARC-support.patch +++ /dev/null @@ -1,27 +0,0 @@ -From fcfd57105b4bdb30d906df152ef01748fa95daff Mon Sep 17 00:00:00 2001 -From: Alexey Brodkin <abrodkin@synopsys.com> -Date: Thu, 13 Sep 2018 17:13:20 +0300 -Subject: [PATCH] icu: Add ARC support - -Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com> - -Upstream-Status: Submitted [ https://github.com/unicode-org/icu/pull/149 ] ---- - i18n/double-conversion-utils.h | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -diff --git a/i18n/double-conversion-utils.h b/i18n/double-conversion-utils.h -index 57fc49b231a3..0bd3e8340673 100644 ---- a/i18n/double-conversion-utils.h -+++ b/i18n/double-conversion-utils.h -@@ -86,7 +86,7 @@ inline void abort_noreturn() { abort(); } - defined(__SH4__) || defined(__alpha__) || \ - defined(_MIPS_ARCH_MIPS32R2) || \ - defined(__AARCH64EL__) || defined(__aarch64__) || \ -- defined(__riscv) -+ defined(__riscv) || defined(__arc__) - #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1 - #elif defined(__mc68000__) - #undef DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS -2.17.1 - diff --git a/external/poky/meta/recipes-support/icu/icu/CVE-2020-10531.patch b/external/poky/meta/recipes-support/icu/icu/CVE-2020-10531.patch new file mode 100644 index 00000000..6697b27d --- /dev/null +++ b/external/poky/meta/recipes-support/icu/icu/CVE-2020-10531.patch @@ -0,0 +1,128 @@ +From b7d08bc04a4296982fcef8b6b8a354a9e4e7afca Mon Sep 17 00:00:00 2001 +From: Frank Tang <ftang@chromium.org> +Date: Sat, 1 Feb 2020 02:39:04 +0000 +Subject: [PATCH] ICU-20958 Prevent SEGV_MAPERR in append + +See #971 + +Upstream-Status: Accepted +CVE: CVE-2020-10531 + +Reference to upstream patch: +https://github.com/unicode-org/icu/commit/b7d08bc04a4296982fcef8b6b8a354a9e4e7afca + +--- + common/unistr.cpp | 6 ++- + test/intltest/ustrtest.cpp | 62 +++++++++++++++++++++++++++++++ + test/intltest/ustrtest.h | 1 + + 3 files changed, 68 insertions(+), 1 deletion(-) + +diff --git a/common/unistr.cpp b/common/unistr.cpp +index 901bb33..6ea0915 100644 +--- a/common/unistr.cpp ++++ b/common/unistr.cpp +@@ -1563,7 +1563,11 @@ UnicodeString::doAppend(const UChar *srcChars, int32_t srcStart, int32_t srcLeng + } + + int32_t oldLength = length(); +- int32_t newLength = oldLength + srcLength; ++ int32_t newLength; ++ if (uprv_add32_overflow(oldLength, srcLength, &newLength)) { ++ setToBogus(); ++ return *this; ++ } + + // Check for append onto ourself + const UChar* oldArray = getArrayStart(); +diff --git a/test/intltest/ustrtest.cpp b/test/intltest/ustrtest.cpp +index b6515ea..ad38bdf 100644 +--- a/test/intltest/ustrtest.cpp ++++ b/test/intltest/ustrtest.cpp +@@ -67,6 +67,7 @@ void UnicodeStringTest::runIndexedTest( int32_t index, UBool exec, const char* & + TESTCASE_AUTO(TestWCharPointers); + TESTCASE_AUTO(TestNullPointers); + TESTCASE_AUTO(TestUnicodeStringInsertAppendToSelf); ++ TESTCASE_AUTO(TestLargeAppend); + TESTCASE_AUTO_END; + } + +@@ -2310,3 +2311,64 @@ void UnicodeStringTest::TestUnicodeStringInsertAppendToSelf() { + str.insert(2, sub); + assertEquals("", u"abbcdcde", str); + } ++ ++void UnicodeStringTest::TestLargeAppend() { ++ if(quick) return; ++ ++ IcuTestErrorCode status(*this, "TestLargeAppend"); ++ // Make a large UnicodeString ++ int32_t len = 0xAFFFFFF; ++ UnicodeString str; ++ char16_t *buf = str.getBuffer(len); ++ // A fast way to set buffer to valid Unicode. ++ // 4E4E is a valid unicode character ++ uprv_memset(buf, 0x4e, len * 2); ++ str.releaseBuffer(len); ++ UnicodeString dest; ++ // Append it 16 times ++ // 0xAFFFFFF times 16 is 0xA4FFFFF1, ++ // which is greater than INT32_MAX, which is 0x7FFFFFFF. ++ int64_t total = 0; ++ for (int32_t i = 0; i < 16; i++) { ++ dest.append(str); ++ total += len; ++ if (total <= INT32_MAX) { ++ assertFalse("dest is not bogus", dest.isBogus()); ++ } else { ++ assertTrue("dest should be bogus", dest.isBogus()); ++ } ++ } ++ dest.remove(); ++ total = 0; ++ for (int32_t i = 0; i < 16; i++) { ++ dest.append(str); ++ total += len; ++ if (total + len <= INT32_MAX) { ++ assertFalse("dest is not bogus", dest.isBogus()); ++ } else if (total <= INT32_MAX) { ++ // Check that a string of exactly the maximum size works ++ UnicodeString str2; ++ int32_t remain = INT32_MAX - total; ++ char16_t *buf2 = str2.getBuffer(remain); ++ if (buf2 == nullptr) { ++ // if somehow memory allocation fail, return the test ++ return; ++ } ++ uprv_memset(buf2, 0x4e, remain * 2); ++ str2.releaseBuffer(remain); ++ dest.append(str2); ++ total += remain; ++ assertEquals("When a string of exactly the maximum size works", (int64_t)INT32_MAX, total); ++ assertEquals("When a string of exactly the maximum size works", INT32_MAX, dest.length()); ++ assertFalse("dest is not bogus", dest.isBogus()); ++ ++ // Check that a string size+1 goes bogus ++ str2.truncate(1); ++ dest.append(str2); ++ total++; ++ assertTrue("dest should be bogus", dest.isBogus()); ++ } else { ++ assertTrue("dest should be bogus", dest.isBogus()); ++ } ++ } ++} +diff --git a/test/intltest/ustrtest.h b/test/intltest/ustrtest.h +index 218befd..4a356a9 100644 +--- a/test/intltest/ustrtest.h ++++ b/test/intltest/ustrtest.h +@@ -97,6 +97,7 @@ public: + void TestWCharPointers(); + void TestNullPointers(); + void TestUnicodeStringInsertAppendToSelf(); ++ void TestLargeAppend(); + }; + + #endif +-- +2.17.1 + diff --git a/external/poky/meta/recipes-support/icu/icu/filter.json b/external/poky/meta/recipes-support/icu/icu/filter.json new file mode 100644 index 00000000..2c63c085 --- /dev/null +++ b/external/poky/meta/recipes-support/icu/icu/filter.json @@ -0,0 +1,2 @@ +{ +} diff --git a/external/poky/meta/recipes-support/icu/icu/fix-install-manx.patch b/external/poky/meta/recipes-support/icu/icu/fix-install-manx.patch index 8186fb41..925b064e 100644 --- a/external/poky/meta/recipes-support/icu/icu/fix-install-manx.patch +++ b/external/poky/meta/recipes-support/icu/icu/fix-install-manx.patch @@ -1,7 +1,7 @@ -From 3063a9211669bee673840ee81f81d30699b9b702 Mon Sep 17 00:00:00 2001 +From a6ddabc8cadb76bfe2d2e374a6702442cfe51cce Mon Sep 17 00:00:00 2001 From: Ross Burton <ross.burton@intel.com> Date: Fri, 9 Oct 2015 17:50:41 +0100 -Subject: [PATCH 2/4] icu: fix install race +Subject: [PATCH] icu: fix install race The generic recursive target calls target-local so also adding it to the dependency list results in races due to install-local being executed twice in @@ -18,11 +18,11 @@ Signed-off-by: Ross Burton <ross.burton@intel.com> source/Makefile.in | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) -diff --git a/source/Makefile.in b/source/Makefile.in -index c1db15b..4948deb 100644 +diff --git a/Makefile.in b/Makefile.in +index be9435b..ada20d7 100644 --- a/Makefile.in +++ b/Makefile.in -@@ -73,7 +73,7 @@ EXTRA_DATA = +@@ -77,7 +77,7 @@ EXTRA_DATA = ## List of phony targets .PHONY : all all-local all-recursive install install-local install-udata install-udata-files install-udata-dlls \ @@ -31,7 +31,7 @@ index c1db15b..4948deb 100644 distclean-local distclean-recursive doc dist dist-local dist-recursive \ check check-local check-recursive clean-recursive-with-twist install-icu \ doc install-doc tests icu4j-data icu4j-data-install update-windows-makefiles xcheck-local xcheck-recursive xperf xcheck xperf-recursive \ -@@ -84,9 +84,9 @@ check-exhaustive check-exhaustive-local check-exhaustive-recursive releaseDist +@@ -88,9 +88,9 @@ check-exhaustive check-exhaustive-local check-exhaustive-recursive releaseDist ## List of standard targets all: all-local all-recursive @@ -43,15 +43,12 @@ index c1db15b..4948deb 100644 dist: dist-recursive check: all check-recursive check-recursive: all -@@ -350,7 +350,7 @@ config.status: $(srcdir)/configure $(srcdir)/common/unicode/uvernum.h - +@@ -357,7 +357,7 @@ config.status: $(srcdir)/configure $(srcdir)/common/unicode/uvernum.h install-manx: $(MANX_FILES) $(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man$(SECTION) + ifneq ($(MANX_FILES),) - $(INSTALL_DATA) $? $(DESTDIR)$(mandir)/man$(SECTION) + $(INSTALL_DATA) $^ $(DESTDIR)$(mandir)/man$(SECTION) + endif config/%.$(SECTION): $(srcdir)/config/%.$(SECTION).in - cd $(top_builddir) \ --- -2.14.2 - diff --git a/external/poky/meta/recipes-support/icu/icu_62.1.bb b/external/poky/meta/recipes-support/icu/icu_62.1.bb deleted file mode 100644 index 4e3750b9..00000000 --- a/external/poky/meta/recipes-support/icu/icu_62.1.bb +++ /dev/null @@ -1,29 +0,0 @@ -require icu.inc - -LIC_FILES_CHKSUM = "file://../LICENSE;md5=63752c57bd0b365c9af9f427ef79c819" - -def icu_download_version(d): - pvsplit = d.getVar('PV').split('.') - return pvsplit[0] + "_" + pvsplit[1] - -ICU_PV = "${@icu_download_version(d)}" - -# http://errors.yoctoproject.org/Errors/Details/20486/ -ARM_INSTRUCTION_SET_armv4 = "arm" -ARM_INSTRUCTION_SET_armv5 = "arm" - -BASE_SRC_URI = "http://download.icu-project.org/files/icu4c/${PV}/icu4c-${ICU_PV}-src.tgz" -SRC_URI = "${BASE_SRC_URI} \ - file://icu-pkgdata-large-cmd.patch \ - file://fix-install-manx.patch \ - file://0002-Add-ARC-support.patch \ - " - -SRC_URI_append_class-target = "\ - file://0001-Disable-LDFLAGSICUDT-for-Linux.patch \ - " -SRC_URI[md5sum] = "490ad9d920158e0314e10ba74ae9a150" -SRC_URI[sha256sum] = "3dd9868d666350dda66a6e305eecde9d479fb70b30d5b55d78a1deffb97d5aa3" - -UPSTREAM_CHECK_REGEX = "(?P<pver>\d+(\.\d+)+)/" -UPSTREAM_CHECK_URI = "http://download.icu-project.org/files/icu4c/" diff --git a/external/poky/meta/recipes-support/icu/icu_66.1.bb b/external/poky/meta/recipes-support/icu/icu_66.1.bb new file mode 100644 index 00000000..08254648 --- /dev/null +++ b/external/poky/meta/recipes-support/icu/icu_66.1.bb @@ -0,0 +1,71 @@ +require icu.inc + +LIC_FILES_CHKSUM = "file://../LICENSE;md5=a3808a5b70071b07f87ff2205e4d75a0" + +def icu_download_version(d): + pvsplit = d.getVar('PV').split('.') + return pvsplit[0] + "_" + pvsplit[1] + +def icu_download_folder(d): + pvsplit = d.getVar('PV').split('.') + return pvsplit[0] + "-" + pvsplit[1] + +ICU_PV = "${@icu_download_version(d)}" +ICU_FOLDER = "${@icu_download_folder(d)}" + +# http://errors.yoctoproject.org/Errors/Details/20486/ +ARM_INSTRUCTION_SET_armv4 = "arm" +ARM_INSTRUCTION_SET_armv5 = "arm" + +BASE_SRC_URI = "https://github.com/unicode-org/icu/releases/download/release-${ICU_FOLDER}/icu4c-${ICU_PV}-src.tgz" +DATA_SRC_URI = "https://github.com/unicode-org/icu/releases/download/release-${ICU_FOLDER}/icu4c-${ICU_PV}-data.zip" +SRC_URI = "${BASE_SRC_URI};name=code \ + ${DATA_SRC_URI};name=data \ + file://filter.json \ + file://icu-pkgdata-large-cmd.patch \ + file://fix-install-manx.patch \ + file://0001-Fix-big-endian-build.patch;apply=no \ + file://0001-icu-Added-armeb-support.patch \ + file://CVE-2020-10531.patch \ + " + +SRC_URI_append_class-target = "\ + file://0001-Disable-LDFLAGSICUDT-for-Linux.patch \ + " +SRC_URI[code.sha256sum] = "52a3f2209ab95559c1cf0a14f24338001f389615bf00e2585ef3dbc43ecf0a2e" +SRC_URI[data.sha256sum] = "8be647f738891d2beb79d48f99077b3499948430eae6f1be112553b15ab0243e" + +UPSTREAM_CHECK_REGEX = "icu4c-(?P<pver>\d+(_\d+)+)-src" +UPSTREAM_CHECK_URI = "https://github.com/unicode-org/icu/releases" + +EXTRA_OECONF_append_libc-musl = " ac_cv_func_strtod_l=no" + +PACKAGECONFIG ?= "" +PACKAGECONFIG[make-icudata] = ",,," + +do_make_icudata_class-target () { + cd ${S} + rm -rf data + cp -a ${WORKDIR}/data . + patch -p1 < ${WORKDIR}/0001-Fix-big-endian-build.patch + ${@bb.utils.contains('PACKAGECONFIG', 'make-icudata', '', 'exit 0', d)} + AR='${BUILD_AR}' \ + CC='${BUILD_CC}' \ + CPP='${BUILD_CPP}' \ + CXX='${BUILD_CXX}' \ + RANLIB='${BUILD_RANLIB}' \ + CFLAGS='${BUILD_CFLAGS}' \ + CPPFLAGS='${BUILD_CPPFLAGS}' \ + CXXFLAGS='${BUILD_CXXFLAGS}' \ + LDFLAGS='${BUILD_LDFLAGS}' \ + ICU_DATA_FILTER_FILE=${WORKDIR}/filter.json \ + ./runConfigureICU Linux --with-data-packaging=archive + oe_runmake + install -Dm644 ${S}/data/out/icudt${ICU_MAJOR_VER}l.dat ${S}/data/in/icudt${ICU_MAJOR_VER}l.dat +} + +do_make_icudata() { + : +} + +addtask make_icudata before do_configure after do_patch |