Compare commits

...

45 Commits
master ... f28

Author SHA1 Message Date
Florian Weimer 1a48e2b943 Do not use parallel make for building locales (#1652228) 2018-11-26 15:32:04 +01:00
Florian Weimer d015587991 Revert glibc_make_flags setting which is not needed in Fedora 28 (#1600034) 2018-08-30 13:25:51 +02:00
Florian Weimer d0db0e9cf6 Fix syntax error in changelog 2018-08-29 14:06:12 +02:00
Florian Weimer 957a5db45d Reference correct bug in changelog (#1622669) 2018-08-29 12:03:39 +02:00
Florian Weimer 14a54ab09c Auto-sync with upstream branch release/2.27/master
Upstream commit: 2b47bb9cba048e778a7d832f284feccb14a40483

- regex: Fix memory overread when pattern contains NUL byte (#1622674)
- x86: Correct index_cpu_LZCNT (swbz#23456)
- x86: Populate COMMON_CPUID_INDEX_80000001 for Intel CPUs (swbz#23459)
2018-08-29 11:52:53 +02:00
Carlos O'Donell d2384bac2e Resolves: #1615608
- Remove abort() warning in manual (#1615608)
2018-08-13 23:27:25 -04:00
Florian Weimer d723b49e72 Add release-independent .gitignore file 2018-08-01 13:18:19 +02:00
Florian Weimer 30163b24c8 Add Provides: bundled(gnulib) 2018-07-23 14:24:47 +02:00
Florian Weimer 1bdba01854 Auto-sync with upstream branch release/2.27/master
Upstream commit: 68c1bf80978594388157c62fd2edd467d4e8dfb2

- regexec: Fix off-by-one bug in weight comparison (#1582229)
- es_BO locale: Change LC_PAPER to en_US (swbz#22996)
- conform/conformtest.pl: Escape literal braces in regular expressions
2018-07-11 16:55:15 +02:00
Florian Weimer cc9621cd19 Add POWER9 multilib (downstream only) 2018-07-11 16:43:53 +02:00
Florian Weimer 48fa0d009d Work around valgrind issue on i686 (#1600034) 2018-07-11 16:32:49 +02:00
Florian Weimer fb3b1025ce Build additional files with stack protector 2018-07-06 22:53:51 +02:00
Florian Weimer cf31c32499 Inherit further build flags (downstream only) 2018-07-06 16:28:44 +02:00
Florian Weimer e7871dc745 Add annobin annotations to assembler code (downstream only) (#1548438) 2018-07-04 16:55:34 +02:00
Florian Weimer 9665a7aade Enable -D_FORTIFY_SOURCE=2 for nonshared code 2018-07-04 13:06:38 +02:00
Florian Weimer e44ca4b8ae Update License tag 2018-07-04 13:03:50 +02:00
Florian Weimer 3a28610eaa Auto-sync with upstream branch release/2.27/master
Upstream commit: 5fab7fe1dc9cab9a46cf5c8840aa9b7ea3a26296

- math: Set 387 and SSE2 rounding mode for tgamma on i386 (swbz#23253)
2018-07-04 12:29:14 +02:00
Florian Weimer 39c94bf6b7 Update sources 2018-07-04 09:31:20 +02:00
Florian Weimer 658a3be009 Switch to upstream implementation of --disable-crypt (#1566464) 2018-07-04 09:15:24 +02:00
Florian Weimer 3fb5edda8e Auto-sync with upstream branch release/2.27/master
Upstream commit: 7602b9e48c30c146d52df91dd83e518b8d0d343b

- math: Fix parameter type in C++ version of iseqsig (swbz#23171)
- Use _STRUCT_TIMESPEC as guard in <bits/types/struct_timespec.h> (swbz#23349)
- getifaddrs: Don't return ifa entries with NULL names (swbz#21812)
- libio: Disable vtable validation in case of interposition (swbz#23313)
- stdio-common/tst-printf.c: Remove part under a non-free license (swbz#23363)
2018-07-03 20:20:32 +02:00
Florian Weimer 3a772d0fd4 Modernise nsswitch.conf defaults (#1581809) 2018-06-20 14:26:32 +02:00
Florian Weimer a6060e7baa Add CVE-2018-11236 reference 2018-06-18 14:58:48 +02:00
Florian Weimer f929de27b9 iconv: Make IBM273 equivalent to ISO-8859-1 (#1592270) 2018-06-18 14:16:33 +02:00
Florian Weimer 8d21d21b5d Align build flags inheritance with master (downstream only) 2018-06-18 14:04:52 +02:00
Florian Weimer 4036357674 Auto-sync with upstream branch release/2.27/master
Upstream commit: 80c83e91140d429c73f79092fdb75eed0fb71da0

- libio: Avoid _allocate_buffer, _free_buffer function pointers (swbz#23236)
- posix: Fix posix_spawnp to not execute invalid binaries in non compat mode
  (swbz#23264)
- elf: Improve DST handling (swbz#23102, swbz#21942, swbz#18018, swbz#23259)
2018-06-18 14:01:47 +02:00
Florian Weimer 77db5a02e7 Rebuild to add back .symtab section in ld.so (#1570246) 2018-05-24 17:29:26 +02:00
Florian Weimer 8ab27a7bef Switch to upstream version of libidn2 removal (#1452750) 2018-05-24 16:07:08 +02:00
Florian Weimer 769d807ffc Auto-sync with upstream branch release/2.27/master
Upstream commit: 50df56ca86a281c8fd99a8100aac75539813788d

- CVE-2018-11237: Buffer overflow in mempcpy for Xeon Phi (#1581275)
2018-05-24 16:06:39 +02:00
Florian Weimer 57a4f74f4b Add CVE-2017-18269 reference 2018-05-22 07:32:36 +02:00
Florian Weimer 608037578b Update changelog 2018-05-17 13:40:07 +02:00
Florian Weimer 358b272a18 Do not run telinit u on upgrades (#1579225) 2018-05-17 13:38:42 +02:00
Florian Weimer 96607f5434 Remove sshd restart from glibc_post_upgrade
/etc/rc.d/init.d/sshd no longer exists in Fedora, so the code never
runs.
2018-05-16 16:03:28 +02:00
Florian Weimer 7f3ef159d0 Update sources file 2018-05-15 09:56:45 +02:00
Florian Weimer 3528d1b928 Auto-sync with upstream branch release/2.27/master
Upstream commit: 0cd4a5e87f6885a2f15fe8e7eb7378d010cdb606

- sunrpc: Remove stray exports (#1577210)
- gd_GB: Fix typo in abbreviated May (swbz#23152)
- realpath: Fix path length overflow (swbz#22786)
- elf: Fix stack overflow with huge PT_NOTE segment (swbz#20419)
- resolv: Fully initialize struct mmsghdr in send_dg (swbz#23037)
- manual: Various fixes to the mbstouwcs example, and mbrtowc update
- getlogin_r: return early when linux sentinel value is set
- resolv: Fix crash in resolver on memory allocation failure (swbz#23005)
- Fix signed integer overflow in random_r (swbz#17343)
- RISC-V: fix struct kernel_sigaction to match the kernel version (swbz#23069)
2018-05-15 09:41:41 +02:00
Florian Weimer 61dc9c8b9d Unconditionally build downstream with -mstackrealign for now 2018-05-11 16:25:42 +02:00
Florian Weimer fb93b16951 Inherit compiler flags in the original order 2018-05-11 16:23:59 +02:00
Florian Weimer 512e08766b Inherit the -mstackrealign flag if it is set 2018-05-11 16:23:11 +02:00
Florian Weimer 9512708e42 Use /usr/bin/python3 for benchmarks scripts (#1577223) 2018-05-11 16:20:01 +02:00
Florian Weimer 19400997dd Revert "Add annobin annotations to assembler code (downstream only)"
CFLAGS is not generally used when calling assembler, and this eventually
exposes a design issue in the annobin notes handling; see bug 1576362.

This reverts commit d43610c362.
2018-05-09 12:01:43 +02:00
Florian Weimer d43610c362 Add annobin annotations to assembler code (downstream only) 2018-05-04 14:26:17 +02:00
Florian Weimer cb37f54dd5 Auto-sync with upstream branch release/2.27/master
Upstream commit: 39071a55392d2d2e0b75fb19f2b48d661c4cc682
2018-03-29 13:03:16 +02:00
Florian Weimer 157a6383c2 Enable annobin on Red Hat Enterprise Linux 2018-03-29 12:53:46 +02:00
Florian Weimer 9dc918bfda Auto-sync with upstream branch release/2.27/master
Upstream commit: 55ad82e45c313454de657931898e974a7a036cad

- i386: Fix memmove issue (swbz#22644)
- RISC-V: fmax/fmin: Handle signalling NaNs correctly (swbz#22884)
- RISC-V: Do not initialize $gp in TLS macros
- cs_CZ locale: Add alternative month names (swbz#22963)
- Greek (el_CY, el_GR) locales: Introduce ab_alt_mon (swbz#22937)
- lt_LT locale: Update abbreviated month names (swbz#22932)
- ca_ES locale: Update LC_TIME (swbz#22848)
- i386: Fix i386 sigaction sa_restorer initialization (swbz#21269)
- Fix multiple definitions of __nss_*_database (swbz#22918)
- Fix netgroup cache keys (swbz#22342)
- linux/powerpc: sync sys/ptrace.h with Linux 4.15 (swbz#22433, swbz#22807)
- powerpc: Undefine Linux ptrace macros that conflict with __ptrace_request
- Add missing “reorder-end” in LC_COLLATE of et_EE (swbz#22517)
- linux/aarch64: sync sys/ptrace.h with Linux 4.15 (swbz#22433)
- [RISC-V] Fix parsing flags in ELF64 files (swbz#22827)
2018-03-29 12:53:37 +02:00
Florian Weimer 8ce0b90ecb Collation update and sync with CLDR (#1551009) 2018-03-02 15:52:13 +01:00
Florian Weimer b8a2275781 Add reference to #1550914 2018-03-02 10:39:48 +01:00
36 changed files with 254432 additions and 623 deletions

6
.gitignore vendored Normal file
View File

@ -0,0 +1,6 @@
# Release tarballs.
/glibc-*.tar.[gx]z
# Generated (source) RPMs.
/*.rpm
# Expanded source trees.
/glibc-*/

25
glibc-asflags.patch Normal file
View File

@ -0,0 +1,25 @@
Author: Florian Weimer <fweimer@redhat.com>
Date: Wed Jul 4 16:16:57 2018 +0200
Makeconfig (ASFLAGS): Always append required assembler flags.
Submitted upstream here:
https://sourceware.org/ml/libc-alpha/2018-07/msg00077.html
Otherwise, we lose essential flags such as -Wa,--noexecstack due to
the way += works in make due to the ASFLAGS command line override.
diff --git a/Makeconfig b/Makeconfig
index b0b27f0113ac18b8..92e76d6200bbcd5b 100644
--- a/Makeconfig
+++ b/Makeconfig
@@ -1047,7 +1047,7 @@ endif
ifndef ASFLAGS
ASFLAGS := $(filter -g% -fdebug-prefix-map=%,$(CFLAGS))
endif
-ASFLAGS += -Werror=undef $(ASFLAGS-config) $(asflags-cpu)
+override ASFLAGS += -Werror=undef $(ASFLAGS-config) $(asflags-cpu)
ifndef BUILD_CC
BUILD_CC = $(CC)

View File

@ -0,0 +1,24 @@
commit 16e349c550942d274d3193ccedaa88855e3ac690
Author: Mike FABIAN <mfabian@redhat.com>
Date: Fri Mar 2 11:29:24 2018 +0100
Remove --quiet argument when installing locales
Using this argument hides problems. I would like to see when something fails.
* localedata/Makefile: Remove --quiet argument when
installing locales
diff --git a/localedata/Makefile b/localedata/Makefile
index c9a973ee0704501b..32e0fd337612862b 100644
--- a/localedata/Makefile
+++ b/localedata/Makefile
@@ -212,7 +212,7 @@ $(INSTALL-SUPPORTED-LOCALES): install-locales-dir
@locale=`echo $@ | sed -e 's/^install-//'`; \
charset=`echo $$locale | sed -e 's,.*/,,'`; \
locale=`echo $$locale | sed -e 's,/[^/]*,,'`; \
- flags="--quiet -c"; \
+ flags="-c"; \
if [ "$$charset" = 'SHIFT_JIS' ] \
|| [ "$$charset" = 'SHIFT_JISX0213' ]; then \
flags="$$flags --no-warnings=ascii"; \

View File

@ -0,0 +1,131 @@
commit 61e613fb97aa619ae4fabac3f106d5fffe15eacb
Author: Mike FABIAN <mfabian@redhat.com>
Date: Wed Dec 13 14:39:54 2017 +0100
Collation order of @-. and space has changed in new iso14651_t1_common file, adapt test files
* localedata/da_DK.ISO-8859-1.in: In the new iso14651_t1_common file
downloaded from ISO, the collation order of @-. and space has changed.
Therefore, this test file needed to be adapted.
* localedata/fr_CA.UTF-8.in: Likewise.
* localedata/fr_FR.UTF-8.in: Likewise.
* localedata/uk_UA.UTF-8.in: Likewise.
diff --git a/localedata/da_DK.ISO-8859-1.in b/localedata/da_DK.ISO-8859-1.in
index e9d2620d5da8a013..9a0e7bc04d49dad2 100644
--- a/localedata/da_DK.ISO-8859-1.in
+++ b/localedata/da_DK.ISO-8859-1.in
@@ -2,8 +2,8 @@ A
ANDRE
ANDRÉ
ANDREAS
-AS
A/S
+AS
CA
ÇA
CB
@@ -12,8 +12,8 @@ DA
ÐA
DB
ÐC
-DSB
D.S.B.
+DSB
DSC
EKSTRA-ARBEJDE
EKSTRABUD
diff --git a/localedata/fr_CA.UTF-8.in b/localedata/fr_CA.UTF-8.in
index 1c05d69f5a4e0068..c98a8e7fb8eda079 100644
--- a/localedata/fr_CA.UTF-8.in
+++ b/localedata/fr_CA.UTF-8.in
@@ -4,8 +4,8 @@
Aalborg
aide
aïeul
-air
@@@air
+air
air@@@
Ã…lborg
août
@@ -22,10 +22,10 @@ casanier
¸libat
colon
´lon
-COOP
CO-OP
-coop
+COOP
co-op
+coop
Copenhagen
COTE
cote
@@ -58,8 +58,9 @@ lésé
L'Haÿ-les-Roses
CON
maçon
-McArthur
Mc Arthur
+McArthur
+Mc Arthurb
Mc Mahon
MODÈLE
modelé
diff --git a/localedata/fr_FR.UTF-8.in b/localedata/fr_FR.UTF-8.in
index 070eb4dc0dce815c..f719dc2210052c28 100644
--- a/localedata/fr_FR.UTF-8.in
+++ b/localedata/fr_FR.UTF-8.in
@@ -4,8 +4,8 @@
Aalborg
aide
aïeul
-air
@@@air
+air
air@@@
Ã…lborg
août
@@ -22,10 +22,10 @@ casanier
¸libat
colon
´lon
-coop
co-op
-COOP
+coop
CO-OP
+COOP
Copenhagen
cote
COTE
@@ -58,8 +58,9 @@ lèse
L'Haÿ-les-Roses
maçon
CON
-McArthur
Mc Arthur
+McArthur
+Mc Arthurb
Mc Mahon
modelé
MODÈLE
diff --git a/localedata/uk_UA.UTF-8.in b/localedata/uk_UA.UTF-8.in
index ff4d284d61bfd139..14ee847d9c3c3e5a 100644
--- a/localedata/uk_UA.UTF-8.in
+++ b/localedata/uk_UA.UTF-8.in
@@ -10,11 +10,11 @@
ґрати
ебонітовий
екÑ<C2BA>порÑ
-екÑ<C2BA>поÑ<C2BE>ол
екÑ<C2BA>-поÑ<C2BE>ол
+екÑ<C2BA>поÑ<C2BE>ол
екÑ<C2BA>поценÑÑ€
-екÑ<C2BA>працÑвник
екÑ<C2BA>-працівник
+екÑ<C2BA>працÑвник
елаÑ<C2B0>ÑичнÑÑ<E28093>ÑÑŒ
електрика
ельбор

View File

@ -0,0 +1,43 @@
commit ffa8106c727607fb365f2b93649fe3ea182dffe4
Author: Mike FABIAN <mfabian@redhat.com>
Date: Fri Dec 15 07:19:45 2017 +0100
Fix posix/bug-regex5.c test case, adapt to iso14651_t1_common upate
This test case tests how many collating elements are defined in
da_DK.ISO-8859-1 locale. The da_DK locale source defines 4:
collating-element <A-A> from "<U0041><U0041>"
collating-element <A-a> from "<U0041><U0061>"
collating-element <a-A> from "<U0061><U0041>"
collating-element <a-a> from "<U0061><U0061>"
The new iso14651_t1_common file defines more collating elements, two
of them are in the ISO-8859-1 range:
collating-element <U004C_00B7> from "<U004C><U00B7>" % decomposition of LATIN CAPITAL LETTER L WITH MIDDLE DOT
collating-element <U006C_00B7> from "<U006C><U00B7>" % decomposition of LATIN SMALL LETTER L WITH MIDDLE DOT
So the total count is now 6 instead of 4.
* posix/bug-regex5.c: Fix test case because with the new
iso14651_t1_common file, the da_DK locale now has 6 collating elements
in the ISO-8859-1 range instead of 4 with the old iso14651_t1_common
file.
diff --git a/posix/bug-regex5.c b/posix/bug-regex5.c
index fd18b19df4e75ee1..573da231e3a4de36 100644
--- a/posix/bug-regex5.c
+++ b/posix/bug-regex5.c
@@ -53,9 +53,9 @@ main (void)
printf ("No collating element!\n");
return 1;
}
- else if (found != 4)
+ else if (found != 6)
{
- printf ("expected 4 collating elements, found %d\n", found);
+ printf ("expected 6 collating elements, found %d\n", found);
return 1;
}

View File

@ -0,0 +1,137 @@
commit cc5351f2c0502826f8b4143f3646d44e334ff7b8
Author: Mike FABIAN <mfabian@redhat.com>
Date: Tue Jan 23 17:29:36 2018 +0100
Fix test cases tst-fnmatch and tst-regexloc for the new iso14651_t1_common file.
See:
http://pubs.opengroup.org/onlinepubs/7908799/xbd/re.html
> A range expression represents the set of collating elements that fall
> between two elements in the current collation sequence,
> inclusively. It is expressed as the starting point and the ending
> point separated by a hyphen (-).
>
> Range expressions must not be used in portable applications because
> their behaviour is dependent on the collating sequence. Ranges will be
> treated according to the current collating sequence, and include such
> characters that fall within the range based on that collating
> sequence, regardless of character values. This, however, means that
> the interpretation will differ depending on collating sequence. If,
> for instance, one collating sequence defines ä as a variant of a,
> while another defines it as a letter following z, then the expression
> [ä-z] is valid in the first language and invalid in the second.
Therefore, using [a-z] does not make much sense except in the C/POSIX locale.
The new iso14651_t1_common lists upper case and lower case Latin characters
in a different order than the old one which causes surprising results
for example in the de_DE locale: [a-z] now includes A because A comes
after a in iso14651_t1_common but does not include Z because that comes
after z in iso14651_t1_common.
* posix/tst-fnmatch.input: Fix results for range expressions
for non C locales.
* posix/tst-regexloc.c: Do not use a range expression for
de_DE.ISO-8859-1 locale.
diff --git a/posix/tst-fnmatch.input b/posix/tst-fnmatch.input
index 88b3f739a59333d5..589fb2a94038dbe3 100644
--- a/posix/tst-fnmatch.input
+++ b/posix/tst-fnmatch.input
@@ -418,21 +418,47 @@ C "-" "[Z-\\]]" NOMATCH
# Following are tests outside the scope of IEEE 2003.2 since they are using
# locales other than the C locale. The main focus of the tests is on the
# handling of ranges and the recognition of character (vs bytes).
+#
+# See:
+#
+# http://pubs.opengroup.org/onlinepubs/7908799/xbd/re.html
+#
+# > A range expression represents the set of collating elements that fall
+# > between two elements in the current collation sequence,
+# > inclusively. It is expressed as the starting point and the ending
+# > point separated by a hyphen (-).
+# >
+# > Range expressions must not be used in portable applications because
+# > their behaviour is dependent on the collating sequence. Ranges will be
+# > treated according to the current collating sequence, and include such
+# > characters that fall within the range based on that collating
+# > sequence, regardless of character values. This, however, means that
+# > the interpretation will differ depending on collating sequence. If,
+# > for instance, one collating sequence defines ä as a variant of a,
+# > while another defines it as a letter following z, then the expression
+# > [ä-z] is valid in the first language and invalid in the second.
+#
+# Therefore, using [a-z] does not make much sense except in the C/POSIX locale.
+# The new iso14651_t1_common lists upper case and lower case Latin characters
+# in a different order than the old one which causes surprising results
+# for example in the de_DE locale: [a-z] now includes A because A comes
+# after a in iso14651_t1_common but does not include Z because that comes
+# after z in iso14651_t1_common.
de_DE.ISO-8859-1 "a" "[a-z]" 0
de_DE.ISO-8859-1 "z" "[a-z]" 0
de_DE.ISO-8859-1 "ä" "[a-z]" 0
de_DE.ISO-8859-1 "ö" "[a-z]" 0
de_DE.ISO-8859-1 "ü" "[a-z]" 0
-de_DE.ISO-8859-1 "A" "[a-z]" NOMATCH
+de_DE.ISO-8859-1 "A" "[a-z]" 0 # surprising but correct!
de_DE.ISO-8859-1 "Z" "[a-z]" NOMATCH
-de_DE.ISO-8859-1 "Ä" "[a-z]" NOMATCH
-de_DE.ISO-8859-1 "Ö" "[a-z]" NOMATCH
-de_DE.ISO-8859-1 "Ü" "[a-z]" NOMATCH
+de_DE.ISO-8859-1 "Ä" "[a-z]" 0 # surprising but correct!
+de_DE.ISO-8859-1 "Ö" "[a-z]" 0 # surprising but correct!
+de_DE.ISO-8859-1 "Ü" "[a-z]" 0 # surprising but correct!
de_DE.ISO-8859-1 "a" "[A-Z]" NOMATCH
-de_DE.ISO-8859-1 "z" "[A-Z]" NOMATCH
-de_DE.ISO-8859-1 "ä" "[A-Z]" NOMATCH
-de_DE.ISO-8859-1 "ö" "[A-Z]" NOMATCH
-de_DE.ISO-8859-1 "ü" "[A-Z]" NOMATCH
+de_DE.ISO-8859-1 "z" "[A-Z]" 0 # surprising but correct!
+de_DE.ISO-8859-1 "ä" "[A-Z]" 0 # surprising but correct!
+de_DE.ISO-8859-1 "ö" "[A-Z]" 0 # surprising but correct!
+de_DE.ISO-8859-1 "ü" "[A-Z]" 0 # surprising but correct!
de_DE.ISO-8859-1 "A" "[A-Z]" 0
de_DE.ISO-8859-1 "Z" "[A-Z]" 0
de_DE.ISO-8859-1 "Ä" "[A-Z]" 0
@@ -515,16 +541,16 @@ de_DE.UTF-8 "z" "[a-z]" 0
de_DE.UTF-8 "ä" "[a-z]" 0
de_DE.UTF-8 "ö" "[a-z]" 0
de_DE.UTF-8 "ü" "[a-z]" 0
-de_DE.UTF-8 "A" "[a-z]" NOMATCH
+de_DE.UTF-8 "A" "[a-z]" 0 # surprising but correct!
de_DE.UTF-8 "Z" "[a-z]" NOMATCH
-de_DE.UTF-8 "Ä" "[a-z]" NOMATCH
-de_DE.UTF-8 "Ö" "[a-z]" NOMATCH
-de_DE.UTF-8 "Ü" "[a-z]" NOMATCH
+de_DE.UTF-8 "Ä" "[a-z]" 0 # surprising but correct!
+de_DE.UTF-8 "Ö" "[a-z]" 0 # surprising but correct!
+de_DE.UTF-8 "Ü" "[a-z]" 0 # surprising but correct!
de_DE.UTF-8 "a" "[A-Z]" NOMATCH
-de_DE.UTF-8 "z" "[A-Z]" NOMATCH
-de_DE.UTF-8 "ä" "[A-Z]" NOMATCH
-de_DE.UTF-8 "ö" "[A-Z]" NOMATCH
-de_DE.UTF-8 "ü" "[A-Z]" NOMATCH
+de_DE.UTF-8 "z" "[A-Z]" 0 # surprising but correct!
+de_DE.UTF-8 "ä" "[A-Z]" 0 # surprising but correct!
+de_DE.UTF-8 "ö" "[A-Z]" 0 # surprising but correct!
+de_DE.UTF-8 "ü" "[A-Z]" 0 # surprising but correct!
de_DE.UTF-8 "A" "[A-Z]" 0
de_DE.UTF-8 "Z" "[A-Z]" 0
de_DE.UTF-8 "Ä" "[A-Z]" 0
diff --git a/posix/tst-regexloc.c b/posix/tst-regexloc.c
index 60235b4d3b3e396e..7fbc496d0ce5117f 100644
--- a/posix/tst-regexloc.c
+++ b/posix/tst-regexloc.c
@@ -29,8 +29,8 @@ do_test (void)
if (setlocale (LC_ALL, "de_DE.ISO-8859-1") == NULL)
puts ("cannot set locale");
- else if (regcomp (&re, "[a-f]*", 0) != REG_NOERROR)
- puts ("cannot compile expression \"[a-f]*\"");
+ else if (regcomp (&re, "[abcdef]*", 0) != REG_NOERROR)
+ puts ("cannot compile expression \"[abcdef]*\"");
else if (regexec (&re, "abcdefCDEF", 1, mat, 0) == REG_NOMATCH)
puts ("no match");
else

View File

@ -0,0 +1,48 @@
commit 242596394db9dad6147bb2b7bcb53d8a7610e1d0
Author: Mike FABIAN <mfabian@redhat.com>
Date: Mon Jan 1 15:33:50 2018 +0100
Improve gen-locales.mk and gen-locale.sh to make test files with @ options work
With out this, adding collation test files like localedata/gez_ER.UTF-8@abegede.in
does not work for locales which contain @ modifiers.
* gen-locales.mk: Make test files which contain @ modifiers in their
name work.
* localedata/gen-locale.sh: Likewise.
diff --git a/gen-locales.mk b/gen-locales.mk
index fd88b5bef16c0fa5..9c523d2a0585216c 100644
--- a/gen-locales.mk
+++ b/gen-locales.mk
@@ -1,8 +1,8 @@
# defines target $(gen-locales) that generates the locales given in $(LOCALES)
-LOCALE_SRCS := $(shell echo "$(LOCALES)"|sed 's/\([^ .]*\)[^ ]*/\1/g')
+LOCALE_SRCS := $(shell echo "$(LOCALES)"|sed 's/\([^ .]*\)[^@ ]*\(@[^ ]*\)\?/\1\2/g')
CHARMAPS := $(shell echo "$(LOCALES)" | \
- sed -e 's/[^ .]*[.]\([^ ]*\)/\1/g' -e s/SJIS/SHIFT_JIS/g)
+ sed -e 's/[^ .]*[.]\([^@ ]*\)\(@[^@ ]*\)*/\1/g' -e s/SJIS/SHIFT_JIS/g)
CTYPE_FILES = $(addsuffix /LC_CTYPE,$(LOCALES))
gen-locales := $(addprefix $(common-objpfx)localedata/,$(CTYPE_FILES))
diff --git a/localedata/gen-locale.sh b/localedata/gen-locale.sh
index 1bba5fee92457647..b91e42af13cda1f6 100644
--- a/localedata/gen-locale.sh
+++ b/localedata/gen-locale.sh
@@ -49,7 +49,8 @@ generate_locale ()
locfile=`echo $locfile|sed 's|.*/\([^/]*/LC_CTYPE\)|\1|'`
locale=`echo $locfile|sed 's|\([^.]*\)[.].*/LC_CTYPE|\1|'`
-charmap=`echo $locfile|sed 's|[^.]*[.]\(.*\)/LC_CTYPE|\1|'`
+charmap=`echo $locfile|sed 's|[^.]*[.]\([^@ ]*\)\(@[^ ]*\)\?/LC_CTYPE|\1|'`
+modifier=`echo $locfile|sed 's|[^.]*[.]\([^@ ]*\)\(@[^ ]*\)\?/LC_CTYPE|\2|'`
echo "Generating locale $locale.$charmap: this might take a while..."
@@ -73,4 +74,4 @@ if [ "$charmap_real" = 'SHIFT_JIS' ] \
flags="$flags --no-warnings=ascii"
fi
-generate_locale $charmap_real $locale $locale.$charmap "$flags"
+generate_locale $charmap_real $locale$modifier $locale.$charmap$modifier "$flags"

120058
glibc-collation-cldr-14.patch Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

62144
glibc-collation-cldr-2.patch Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,56 @@
commit 06061c30d615b2862ac360f11384092c92022ea7
Author: Mike FABIAN <mfabian@redhat.com>
Date: Tue Jan 30 18:04:31 2018 +0100
Necessary changes after updating the iso14651_t1_common file
* localedata/locales/iso14651_t1_common: Necessary changes
to make the file downloaded from ISO usable by glibc.
diff --git a/localedata/locales/iso14651_t1_common b/localedata/locales/iso14651_t1_common
index 989f3322c0ce99be..9546a785fc44b671 100644
--- a/localedata/locales/iso14651_t1_common
+++ b/localedata/locales/iso14651_t1_common
@@ -1,7 +1,14 @@
-% escape_char /
-% comment_char %
+escape_char /
+comment_char %
-% LC_COLLATE
+% This file is part of the GNU C Library and contains locale data.
+% The Free Software Foundation does not claim any copyright interest
+% in the locale data contained in this file. The foregoing does not
+% affect the license of the GNU C Library as a whole. It does not
+% exempt you from the conditions of the license if your use would
+% otherwise be governed by that license.
+
+LC_COLLATE
% Decomment the lines above to create an
% LC_COLLATE definition in the style of ISO/IEC TR 14652:2004.
@@ -21867,10 +21874,11 @@ collating-element <UAABC_AAAF> from "<UAABC><UAAAF>" % collation-element for reo
<SFFFF> % Largest primary weight
-
-% order_start forward;forward;forward;forward,position
-
-% order_start forward;backward;forward;forward,position
+ifdef DIACRIT_BACKWARD
+order_start forward;backward;forward;forward,position
+else
+order_start forward;forward;forward;forward,position
+endif
% Decomment the first order_start line to specify directions for each level.
% To tailor for French accent handling, instead decomment the second
@@ -52612,7 +52620,7 @@ collating-element <UAABC_AAAF> from "<UAABC><UAAAF>" % collation-element for reo
order_end
-% END LC_COLLATE
+END LC_COLLATE
% Decomment the line above to create a 14652-style
% LC_COLLATE definition.

28767
glibc-collation-cldr-4.patch Normal file

File diff suppressed because it is too large Load Diff

32844
glibc-collation-cldr-5.patch Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,342 @@
commit 3e7089bf28ed1fd77e644bb3ce7405aff7847e61
Author: Mike FABIAN <mfabian@redhat.com>
Date: Mon Dec 11 20:00:24 2017 +0100
Add convenience symbols like <AFTER-A>, <BEFORE-A> to iso14651_t1_common
* localedata/locales/iso14651_t1_common: Add some convenient collation
symbols like <AFTER-A>, <BEFORE-A> to make tailoring easier using
rules similar to those in CLDR.
diff --git a/localedata/locales/iso14651_t1_common b/localedata/locales/iso14651_t1_common
index c976136e1c26afc2..443e689da0ee03dc 100644
--- a/localedata/locales/iso14651_t1_common
+++ b/localedata/locales/iso14651_t1_common
@@ -339,6 +339,68 @@ collating-symbol <S1F000>..<S1F9FF> % Symbols from SMP
collating-symbol <SFFFF> % Guaranteed largest symbol value. Keep at end of this list
+% Convenience first level collation symbols added here
+% to make tailoring easier using rules similar to those in CLDR.
+
+collating-symbol <BEFORE-A>
+collating-symbol <AFTER-A>
+collating-symbol <BEFORE-B>
+collating-symbol <AFTER-B>
+collating-symbol <BEFORE-C>
+collating-symbol <AFTER-C>
+collating-symbol <BEFORE-D>
+collating-symbol <AFTER-D>
+collating-symbol <BEFORE-E>
+collating-symbol <AFTER-E>
+collating-symbol <BEFORE-F>
+collating-symbol <AFTER-F>
+collating-symbol <BEFORE-G>
+collating-symbol <AFTER-G>
+collating-symbol <BEFORE-H>
+collating-symbol <AFTER-H>
+collating-symbol <BEFORE-I>
+collating-symbol <AFTER-I>
+collating-symbol <BEFORE-J>
+collating-symbol <AFTER-J>
+collating-symbol <BEFORE-K>
+collating-symbol <AFTER-K>
+collating-symbol <BEFORE-L>
+collating-symbol <AFTER-L>
+collating-symbol <BEFORE-M>
+collating-symbol <AFTER-M>
+collating-symbol <BEFORE-N>
+collating-symbol <AFTER-N>
+collating-symbol <BEFORE-O>
+collating-symbol <AFTER-O>
+collating-symbol <BEFORE-P>
+collating-symbol <AFTER-P>
+collating-symbol <BEFORE-Q>
+collating-symbol <AFTER-Q>
+collating-symbol <BEFORE-R>
+collating-symbol <AFTER-R>
+collating-symbol <BEFORE-S>
+collating-symbol <AFTER-S>
+collating-symbol <BEFORE-T>
+collating-symbol <AFTER-T>
+collating-symbol <BEFORE-U>
+collating-symbol <AFTER-U>
+collating-symbol <BEFORE-V>
+collating-symbol <AFTER-V>
+collating-symbol <BEFORE-W>
+collating-symbol <AFTER-W>
+collating-symbol <BEFORE-X>
+collating-symbol <AFTER-X>
+collating-symbol <BEFORE-Y>
+collating-symbol <AFTER-Y>
+collating-symbol <BEFORE-Z>
+collating-symbol <AFTER-Z>
+collating-symbol <BEFORE-THORN>
+collating-symbol <AFTER-THORN>
+collating-symbol <BEFORE-EZH>
+collating-symbol <AFTER-EZH>
+collating-symbol <BEFORE-LATIN>
+collating-symbol <AFTER-LATIN>
+
% Special fourth-level collating symbol
collating-symbol <PLAIN> % Maximal level 4 weight
@@ -8225,6 +8287,8 @@ collating-element <UAABC_AAAF> from "<UAABC><UAAAF>" % collation-element for reo
<S0037> % DIGIT SEVEN
<S0038> % DIGIT EIGHT
<S0039> % DIGIT NINE
+<BEFORE-LATIN>
+<BEFORE-A>
<S0061> % LATIN SMALL LETTER A
<S1D00> % LATIN LETTER SMALL CAPITAL A
<S2C65> % LATIN SMALL LETTER A WITH STROKE
@@ -8238,6 +8302,8 @@ collating-element <UAABC_AAAF> from "<UAABC><UAAAF>" % collation-element for reo
<S1D90> % LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK
<S0252> % LATIN SMALL LETTER TURNED ALPHA
<SAB64> % LATIN SMALL LETTER INVERTED ALPHA
+<AFTER-A>
+<BEFORE-B>
<S0062> % LATIN SMALL LETTER B
<S0299> % LATIN LETTER SMALL CAPITAL B
<S0180> % LATIN SMALL LETTER B WITH STROKE
@@ -8249,6 +8315,8 @@ collating-element <UAABC_AAAF> from "<UAABC><UAAAF>" % collation-element for reo
<S0253> % LATIN SMALL LETTER B WITH HOOK
<S0183> % LATIN SMALL LETTER B WITH TOPBAR
<SA7B5> % LATIN SMALL LETTER BETA
+<AFTER-B>
+<BEFORE-C>
<S0063> % LATIN SMALL LETTER C
<S1D04> % LATIN LETTER SMALL CAPITAL C
<S023C> % LATIN SMALL LETTER C WITH STROKE
@@ -8258,6 +8326,8 @@ collating-element <UAABC_AAAF> from "<UAABC><UAAAF>" % collation-element for reo
<S0255> % LATIN SMALL LETTER C WITH CURL
<S2184> % LATIN SMALL LETTER REVERSED C
<SA73F> % LATIN SMALL LETTER REVERSED C WITH DOT
+<AFTER-C>
+<BEFORE-D>
<S0064> % LATIN SMALL LETTER D
<S1D05> % LATIN LETTER SMALL CAPITAL D
<S1D06> % LATIN LETTER SMALL CAPITAL ETH
@@ -8270,6 +8340,8 @@ collating-element <UAABC_AAAF> from "<UAABC><UAAAF>" % collation-element for reo
<S0221> % LATIN SMALL LETTER D WITH CURL
<SA771> % LATIN SMALL LETTER DUM
<S1E9F> % LATIN SMALL LETTER DELTA
+<AFTER-D>
+<BEFORE-E>
<S0065> % LATIN SMALL LETTER E
<S1D07> % LATIN LETTER SMALL CAPITAL E
<SAB32> % LATIN SMALL LETTER BLACKLETTER E
@@ -8293,6 +8365,8 @@ collating-element <UAABC_AAAF> from "<UAABC><UAAAF>" % collation-element for reo
<S025E> % LATIN SMALL LETTER CLOSED REVERSED OPEN E
<S029A> % LATIN SMALL LETTER CLOSED OPEN E
<S0264> % LATIN SMALL LETTER RAMS HORN
+<AFTER-E>
+<BEFORE-F>
<S0066> % LATIN SMALL LETTER F
<SA730> % LATIN LETTER SMALL CAPITAL F
<SAB35> % LATIN SMALL LETTER LENIS F
@@ -8302,6 +8376,8 @@ collating-element <UAABC_AAAF> from "<UAABC><UAAAF>" % collation-element for reo
<S0192> % LATIN SMALL LETTER F WITH HOOK
<S214E> % TURNED SMALL F
<SA7FB> % LATIN EPIGRAPHIC LETTER REVERSED F
+<AFTER-F>
+<BEFORE-G>
<S0067> % LATIN SMALL LETTER G
<S0261> % LATIN SMALL LETTER SCRIPT G
<SAB36> % LATIN SMALL LETTER SCRIPT G WITH CROSSED-TAIL
@@ -8314,6 +8390,8 @@ collating-element <UAABC_AAAF> from "<UAABC><UAAAF>" % collation-element for reo
<SA77F> % LATIN SMALL LETTER TURNED INSULAR G
<S0263> % LATIN SMALL LETTER GAMMA
<S01A3> % LATIN SMALL LETTER OI
+<AFTER-G>
+<BEFORE-H>
<S0068> % LATIN SMALL LETTER H
<S029C> % LATIN LETTER SMALL CAPITAL H
<S0195> % LATIN SMALL LETTER HV
@@ -8325,6 +8403,8 @@ collating-element <UAABC_AAAF> from "<UAABC><UAAAF>" % collation-element for reo
<S0267> % LATIN SMALL LETTER HENG WITH HOOK
<S02BB> % MODIFIER LETTER TURNED COMMA
<S02BD> % MODIFIER LETTER REVERSED COMMA
+<AFTER-H>
+<BEFORE-I>
<S0069> % LATIN SMALL LETTER I
<S0131> % LATIN SMALL LETTER DOTLESS I
<S026A> % LATIN LETTER SMALL CAPITAL I
@@ -8336,6 +8416,8 @@ collating-element <UAABC_AAAF> from "<UAABC><UAAAF>" % collation-element for reo
<S1D96> % LATIN SMALL LETTER I WITH RETROFLEX HOOK
<S0269> % LATIN SMALL LETTER IOTA
<S1D7C> % LATIN SMALL LETTER IOTA WITH STROKE
+<AFTER-I>
+<BEFORE-J>
<S006A> % LATIN SMALL LETTER J
<S0237> % LATIN SMALL LETTER DOTLESS J
<S1D0A> % LATIN LETTER SMALL CAPITAL J
@@ -8343,6 +8425,8 @@ collating-element <UAABC_AAAF> from "<UAABC><UAAAF>" % collation-element for reo
<S029D> % LATIN SMALL LETTER J WITH CROSSED-TAIL
<S025F> % LATIN SMALL LETTER DOTLESS J WITH STROKE
<S0284> % LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK
+<AFTER-J>
+<BEFORE-K>
<S006B> % LATIN SMALL LETTER K
<S1D0B> % LATIN LETTER SMALL CAPITAL K
<S1D84> % LATIN SMALL LETTER K WITH PALATAL HOOK
@@ -8352,6 +8436,8 @@ collating-element <UAABC_AAAF> from "<UAABC><UAAAF>" % collation-element for reo
<SA743> % LATIN SMALL LETTER K WITH DIAGONAL STROKE
<SA745> % LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE
<S029E> % LATIN SMALL LETTER TURNED K
+<AFTER-K>
+<BEFORE-L>
<S006C> % LATIN SMALL LETTER L
<S029F> % LATIN LETTER SMALL CAPITAL L
<SA747> % LATIN SMALL LETTER BROKEN L
@@ -8373,6 +8459,8 @@ collating-element <UAABC_AAAF> from "<UAABC><UAAAF>" % collation-element for reo
<SA781> % LATIN SMALL LETTER TURNED L
<S019B> % LATIN SMALL LETTER LAMBDA WITH STROKE
<S028E> % LATIN SMALL LETTER TURNED Y
+<AFTER-L>
+<BEFORE-M>
<S006D> % LATIN SMALL LETTER M
<S1D0D> % LATIN LETTER SMALL CAPITAL M
<S1D6F> % LATIN SMALL LETTER M WITH MIDDLE TILDE
@@ -8382,6 +8470,8 @@ collating-element <UAABC_AAAF> from "<UAABC><UAAAF>" % collation-element for reo
<SA7FD> % LATIN EPIGRAPHIC LETTER INVERTED M
<SA7FF> % LATIN EPIGRAPHIC LETTER ARCHAIC M
<SA773> % LATIN SMALL LETTER MUM
+<AFTER-M>
+<BEFORE-N>
<S006E> % LATIN SMALL LETTER N
<S0274> % LATIN LETTER SMALL CAPITAL N
<S1D3B> % MODIFIER LETTER CAPITAL REVERSED N
@@ -8397,6 +8487,8 @@ collating-element <UAABC_AAAF> from "<UAABC><UAAAF>" % collation-element for reo
<SA774> % LATIN SMALL LETTER NUM
<S014B> % LATIN SMALL LETTER ENG
<SAB3C> % LATIN SMALL LETTER ENG WITH CROSSED-TAIL
+<AFTER-N>
+<BEFORE-O>
<S006F> % LATIN SMALL LETTER O
<S1D0F> % LATIN LETTER SMALL CAPITAL O
<S1D11> % LATIN SMALL LETTER SIDEWAYS O
@@ -8426,6 +8518,8 @@ collating-element <UAABC_AAAF> from "<UAABC><UAAAF>" % collation-element for reo
<SA7B7> % LATIN SMALL LETTER OMEGA
<S0223> % LATIN SMALL LETTER OU
<S1D15> % LATIN LETTER SMALL CAPITAL OU
+<AFTER-O>
+<BEFORE-P>
<S0070> % LATIN SMALL LETTER P
<S1D18> % LATIN LETTER SMALL CAPITAL P
<S1D7D> % LATIN SMALL LETTER P WITH STROKE
@@ -8438,12 +8532,16 @@ collating-element <UAABC_AAAF> from "<UAABC><UAAAF>" % collation-element for reo
<SA7FC> % LATIN EPIGRAPHIC LETTER REVERSED P
<S0278> % LATIN SMALL LETTER PHI
<S2C77> % LATIN SMALL LETTER TAILLESS PHI
+<AFTER-P>
+<BEFORE-Q>
<S0071> % LATIN SMALL LETTER Q
<SA757> % LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER
<SA759> % LATIN SMALL LETTER Q WITH DIAGONAL STROKE
<S02A0> % LATIN SMALL LETTER Q WITH HOOK
<S024B> % LATIN SMALL LETTER Q WITH HOOK TAIL
<S0138> % LATIN SMALL LETTER KRA
+<AFTER-Q>
+<BEFORE-R>
<S0072> % LATIN SMALL LETTER R
<SAB45> % LATIN SMALL LETTER STIRRUP R
<S0280> % LATIN LETTER SMALL CAPITAL R
@@ -8473,6 +8571,8 @@ collating-element <UAABC_AAAF> from "<UAABC><UAAAF>" % collation-element for reo
<SA775> % LATIN SMALL LETTER RUM
<SA776> % LATIN LETTER SMALL CAPITAL RUM
<SA75D> % LATIN SMALL LETTER RUM ROTUNDA
+<AFTER-R>
+<BEFORE-S>
<S0073> % LATIN SMALL LETTER S
<SA731> % LATIN LETTER SMALL CAPITAL S
<S1D74> % LATIN SMALL LETTER S WITH MIDDLE TILDE
@@ -8488,6 +8588,8 @@ collating-element <UAABC_AAAF> from "<UAABC><UAAAF>" % collation-element for reo
<S0285> % LATIN SMALL LETTER SQUAT REVERSED ESH
<S1D98> % LATIN SMALL LETTER ESH WITH RETROFLEX HOOK
<S0286> % LATIN SMALL LETTER ESH WITH CURL
+<AFTER-S>
+<BEFORE-T>
<S0074> % LATIN SMALL LETTER T
<S1D1B> % LATIN LETTER SMALL CAPITAL T
<S0167> % LATIN SMALL LETTER T WITH STROKE
@@ -8499,6 +8601,8 @@ collating-element <UAABC_AAAF> from "<UAABC><UAAAF>" % collation-element for reo
<S0236> % LATIN SMALL LETTER T WITH CURL
<SA777> % LATIN SMALL LETTER TUM
<S0287> % LATIN SMALL LETTER TURNED T
+<AFTER-T>
+<BEFORE-U>
<S0075> % LATIN SMALL LETTER U
<S1D1C> % LATIN LETTER SMALL CAPITAL U
<SAB4E> % LATIN SMALL LETTER U WITH SHORT RIGHT LEG
@@ -8521,6 +8625,8 @@ collating-element <UAABC_AAAF> from "<UAABC><UAAAF>" % collation-element for reo
<S0270> % LATIN SMALL LETTER TURNED M WITH LONG LEG
<S028A> % LATIN SMALL LETTER UPSILON
<S1D7F> % LATIN SMALL LETTER UPSILON WITH STROKE
+<AFTER-U>
+<BEFORE-V>
<S0076> % LATIN SMALL LETTER V
<S1D20> % LATIN LETTER SMALL CAPITAL V
<SA75F> % LATIN SMALL LETTER V WITH DIAGONAL STROKE
@@ -8530,10 +8636,14 @@ collating-element <UAABC_AAAF> from "<UAABC><UAAAF>" % collation-element for reo
<S2C74> % LATIN SMALL LETTER V WITH CURL
<S1EFD> % LATIN SMALL LETTER MIDDLE-WELSH V
<S028C> % LATIN SMALL LETTER TURNED V
+<AFTER-V>
+<BEFORE-W>
<S0077> % LATIN SMALL LETTER W
<S1D21> % LATIN LETTER SMALL CAPITAL W
<S2C73> % LATIN SMALL LETTER W WITH HOOK
<S028D> % LATIN SMALL LETTER TURNED W
+<AFTER-W>
+<BEFORE-X>
<S0078> % LATIN SMALL LETTER X
<S1D8D> % LATIN SMALL LETTER X WITH PALATAL HOOK
<SAB56> % LATIN SMALL LETTER X WITH LOW RIGHT RING
@@ -8543,6 +8653,8 @@ collating-element <UAABC_AAAF> from "<UAABC><UAAAF>" % collation-element for reo
<SAB53> % LATIN SMALL LETTER CHI
<SAB54> % LATIN SMALL LETTER CHI WITH LOW RIGHT RING
<SAB55> % LATIN SMALL LETTER CHI WITH LOW LEFT SERIF
+<AFTER-X>
+<BEFORE-Y>
<S0079> % LATIN SMALL LETTER Y
<S028F> % LATIN LETTER SMALL CAPITAL Y
<S024F> % LATIN SMALL LETTER Y WITH STROKE
@@ -8550,6 +8662,8 @@ collating-element <UAABC_AAAF> from "<UAABC><UAAAF>" % collation-element for reo
<S1EFF> % LATIN SMALL LETTER Y WITH LOOP
<SAB5A> % LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
<S021D> % LATIN SMALL LETTER YOGH
+<AFTER-Y>
+<BEFORE-Z>
<S007A> % LATIN SMALL LETTER Z
<S1D22> % LATIN LETTER SMALL CAPITAL Z
<S01B6> % LATIN SMALL LETTER Z WITH STROKE
@@ -8561,15 +8675,20 @@ collating-element <UAABC_AAAF> from "<UAABC><UAAAF>" % collation-element for reo
<S0240> % LATIN SMALL LETTER Z WITH SWASH TAIL
<S2C6C> % LATIN SMALL LETTER Z WITH DESCENDER
<SA763> % LATIN SMALL LETTER VISIGOTHIC Z
+<AFTER-Z>
+<BEFORE-EZH>
<S0292> % LATIN SMALL LETTER EZH
<S1D23> % LATIN LETTER SMALL CAPITAL EZH
<S01B9> % LATIN SMALL LETTER EZH REVERSED
<S1D9A> % LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
<S01BA> % LATIN SMALL LETTER EZH WITH TAIL
<S0293> % LATIN SMALL LETTER EZH WITH CURL
+<AFTER-EZH>
+<BEFORE-THORN>
<S00FE> % LATIN SMALL LETTER THORN
<SA765> % LATIN SMALL LETTER THORN WITH STROKE
<SA767> % LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER
+<AFTER-THORN>
<S01BF> % LATIN LETTER WYNN
<SA769> % LATIN SMALL LETTER VEND
<SAB60> % LATIN SMALL LETTER SAKHA YAT
@@ -8612,6 +8731,7 @@ collating-element <UAABC_AAAF> from "<UAABC><UAAAF>" % collation-element for reo
<S0298> % LATIN LETTER BILABIAL CLICK
<S02AC> % LATIN LETTER BILABIAL PERCUSSIVE
<S02AD> % LATIN LETTER BIDENTAL PERCUSSIVE
+<AFTER-LATIN>
<S03B1> % GREEK SMALL LETTER ALPHA
<S03B2> % GREEK SMALL LETTER BETA
<S03B3> % GREEK SMALL LETTER GAMMA

View File

@ -0,0 +1,949 @@
commit a93fecdcece3e2178834f4b4868b2309b0158753
Author: Mike FABIAN <mfabian@redhat.com>
Date: Wed Jan 31 06:18:47 2018 +0100
iso14651_t1_common: make the fourth level the codepoint for characters which are ignorable on all 4 levels
Entries for characters which have “IGNORE” on all 4 levels like:
<U0001> IGNORE;IGNORE;IGNORE;IGNORE % START OF HEADING (in ISO 6429)
are changed into:
<U0001> IGNORE;IGNORE;IGNORE;<U0001> % START OF HEADING (in ISO 6429)
i.e. putting the code point of the character into the fourth level
instead of “IGNORE”. Without that change, all such characters
would compare equal which would make a wcscoll test case fail.
It is better to have a clearly defined sort order even for characters
like this so it is good to use the code point as a tie-break.
* localedata/locales/iso14651_t1_common: Use the code point of a
character in the fourth collation level instead of IGNORE for all
entries which have IGNORE on all 4 levels.
diff --git a/localedata/locales/iso14651_t1_common b/localedata/locales/iso14651_t1_common
index 443e689da0ee03dc..2d5fdfa87bb93fc8 100644
--- a/localedata/locales/iso14651_t1_common
+++ b/localedata/locales/iso14651_t1_common
@@ -54817,463 +54817,463 @@ endif
% <Uxxxx> <Base>;<Accent>;<Case>;<Special>
-<U0000> IGNORE;IGNORE;IGNORE;IGNORE % NULL (in ISO 6429)
-<U0001> IGNORE;IGNORE;IGNORE;IGNORE % START OF HEADING (in ISO 6429)
-<U0002> IGNORE;IGNORE;IGNORE;IGNORE % START OF TEXT (in ISO 6429)
-<U0003> IGNORE;IGNORE;IGNORE;IGNORE % END OF TEXT (in ISO 6429)
-<U0004> IGNORE;IGNORE;IGNORE;IGNORE % END OF TRANSMISSION (in ISO 6429)
-<U0005> IGNORE;IGNORE;IGNORE;IGNORE % ENQUIRY (in ISO 6429)
-<U0006> IGNORE;IGNORE;IGNORE;IGNORE % ACKNOWLEDGE (in ISO 6429)
-<U0007> IGNORE;IGNORE;IGNORE;IGNORE % BELL (in ISO 6429)
-<U0008> IGNORE;IGNORE;IGNORE;IGNORE % BACKSPACE (in ISO 6429)
-<U000E> IGNORE;IGNORE;IGNORE;IGNORE % SHIFT OUT (in ISO 6429)
-<U000F> IGNORE;IGNORE;IGNORE;IGNORE % SHIFT IN (in ISO 6429)
-<U0010> IGNORE;IGNORE;IGNORE;IGNORE % DATA LINK ESCAPE (in ISO 6429)
-<U0011> IGNORE;IGNORE;IGNORE;IGNORE % DEVICE CONTROL ONE (in ISO 6429)
-<U0012> IGNORE;IGNORE;IGNORE;IGNORE % DEVICE CONTROL TWO (in ISO 6429)
-<U0013> IGNORE;IGNORE;IGNORE;IGNORE % DEVICE CONTROL THREE (in ISO 6429)
-<U0014> IGNORE;IGNORE;IGNORE;IGNORE % DEVICE CONTROL FOUR (in ISO 6429)
-<U0015> IGNORE;IGNORE;IGNORE;IGNORE % NEGATIVE ACKNOWLEDGE (in ISO 6429)
-<U0016> IGNORE;IGNORE;IGNORE;IGNORE % SYNCHRONOUS IDLE (in ISO 6429)
-<U0017> IGNORE;IGNORE;IGNORE;IGNORE % END OF TRANSMISSION BLOCK (in ISO 6429)
-<U0018> IGNORE;IGNORE;IGNORE;IGNORE % CANCEL (in ISO 6429)
-<U0019> IGNORE;IGNORE;IGNORE;IGNORE % END OF MEDIUM (in ISO 6429)
-<U001A> IGNORE;IGNORE;IGNORE;IGNORE % SUBSTITUTE (in ISO 6429)
-<U001B> IGNORE;IGNORE;IGNORE;IGNORE % ESCAPE (in ISO 6429)
-<U001C> IGNORE;IGNORE;IGNORE;IGNORE % FILE SEPARATOR (in ISO 6429)
-<U001D> IGNORE;IGNORE;IGNORE;IGNORE % GROUP SEPARATOR (in ISO 6429)
-<U001E> IGNORE;IGNORE;IGNORE;IGNORE % RECORD SEPARATOR (in ISO 6429)
-<U001F> IGNORE;IGNORE;IGNORE;IGNORE % UNIT SEPARATOR (in ISO 6429)
-<U007F> IGNORE;IGNORE;IGNORE;IGNORE % DELETE (in ISO 6429)
-<U0080> IGNORE;IGNORE;IGNORE;IGNORE % <control>
-<U0081> IGNORE;IGNORE;IGNORE;IGNORE % <control>
-<U0082> IGNORE;IGNORE;IGNORE;IGNORE % BREAK PERMITTED HERE (in ISO 6429)
-<U0083> IGNORE;IGNORE;IGNORE;IGNORE % NO BREAK HERE (in ISO 6429)
-<U0084> IGNORE;IGNORE;IGNORE;IGNORE % <control>
-<U0086> IGNORE;IGNORE;IGNORE;IGNORE % START OF SELECTED AREA (in ISO 6429)
-<U0087> IGNORE;IGNORE;IGNORE;IGNORE % END OF SELECTED AREA (in ISO 6429)
-<U0088> IGNORE;IGNORE;IGNORE;IGNORE % CHARACTER TABULATION SET (in ISO 6429)
-<U0089> IGNORE;IGNORE;IGNORE;IGNORE % CHARACTER TABULATION WITH JUSTIFICATION (in ISO 6429)
-<U008A> IGNORE;IGNORE;IGNORE;IGNORE % LINE TABULATION SET (in ISO 6429)
-<U008B> IGNORE;IGNORE;IGNORE;IGNORE % PARTIAL LINE FORWARD (in ISO 6429)
-<U008C> IGNORE;IGNORE;IGNORE;IGNORE % PARTIAL LINE BACKWARD (in ISO 6429)
-<U008D> IGNORE;IGNORE;IGNORE;IGNORE % PARTIAL LINE FEED (in ISO 6429)
-<U008E> IGNORE;IGNORE;IGNORE;IGNORE % SINGLE SHIFT TWO (in ISO 6429)
-<U008F> IGNORE;IGNORE;IGNORE;IGNORE % SINGLE SHIFT THREE (in ISO 6429)
-<U0090> IGNORE;IGNORE;IGNORE;IGNORE % DEVICE CONTROL STRING (in ISO 6429)
-<U0091> IGNORE;IGNORE;IGNORE;IGNORE % PRIVATE USE ONE (in ISO 6429)
-<U0092> IGNORE;IGNORE;IGNORE;IGNORE % PRIVATE USE TWO (in ISO 6429)
-<U0093> IGNORE;IGNORE;IGNORE;IGNORE % SET TRANSMIT STATE (in ISO 6429)
-<U0094> IGNORE;IGNORE;IGNORE;IGNORE % CANCEL CHARACTER (in ISO 6429)
-<U0095> IGNORE;IGNORE;IGNORE;IGNORE % MESSAGE WAITING (in ISO 6429)
-<U0096> IGNORE;IGNORE;IGNORE;IGNORE % START OF GUARDED AREA (in ISO 6429)
-<U0097> IGNORE;IGNORE;IGNORE;IGNORE % END OF GUARDED AREA (in ISO 6429)
-<U0098> IGNORE;IGNORE;IGNORE;IGNORE % START OF STRING (in ISO 6429)
-<U0099> IGNORE;IGNORE;IGNORE;IGNORE % <control>
-<U009A> IGNORE;IGNORE;IGNORE;IGNORE % SINGLE CHARACTER INTRODUCER (in ISO 6429)
-<U009B> IGNORE;IGNORE;IGNORE;IGNORE % CONTROL SEQUENCE INTRODUCER (in ISO 6429)
-<U009C> IGNORE;IGNORE;IGNORE;IGNORE % STRING TERMINATOR (in ISO 6429)
-<U009D> IGNORE;IGNORE;IGNORE;IGNORE % OPERATING SYSTEM COMMAND (in ISO 6429)
-<U009E> IGNORE;IGNORE;IGNORE;IGNORE % PRIVACY MESSAGE (in ISO 6429)
-<U009F> IGNORE;IGNORE;IGNORE;IGNORE % APPLICATION PROGRAM COMMAND (in ISO 6429)
-<U00AD> IGNORE;IGNORE;IGNORE;IGNORE % SOFT HYPHEN
-<U061C> IGNORE;IGNORE;IGNORE;IGNORE % ARABIC LETTER MARK
-<U070F> IGNORE;IGNORE;IGNORE;IGNORE % SYRIAC ABBREVIATION MARK
-<U08E2> IGNORE;IGNORE;IGNORE;IGNORE % ARABIC DISPUTED END OF AYAH
-<U180B> IGNORE;IGNORE;IGNORE;IGNORE % MONGOLIAN FREE VARIATION SELECTOR ONE
-<U180C> IGNORE;IGNORE;IGNORE;IGNORE % MONGOLIAN FREE VARIATION SELECTOR TWO
-<U180D> IGNORE;IGNORE;IGNORE;IGNORE % MONGOLIAN FREE VARIATION SELECTOR THREE
-<U180E> IGNORE;IGNORE;IGNORE;IGNORE % MONGOLIAN VOWEL SEPARATOR
-<U200B> IGNORE;IGNORE;IGNORE;IGNORE % ZERO WIDTH SPACE
-<U200C> IGNORE;IGNORE;IGNORE;IGNORE % ZERO WIDTH NON-JOINER
-<U200D> IGNORE;IGNORE;IGNORE;IGNORE % ZERO WIDTH JOINER
-<U200E> IGNORE;IGNORE;IGNORE;IGNORE % LEFT-TO-RIGHT MARK
-<U200F> IGNORE;IGNORE;IGNORE;IGNORE % RIGHT-TO-LEFT MARK
-<U202A> IGNORE;IGNORE;IGNORE;IGNORE % LEFT-TO-RIGHT EMBEDDING
-<U202B> IGNORE;IGNORE;IGNORE;IGNORE % RIGHT-TO-LEFT EMBEDDING
-<U202C> IGNORE;IGNORE;IGNORE;IGNORE % POP DIRECTIONAL FORMATTING
-<U202D> IGNORE;IGNORE;IGNORE;IGNORE % LEFT-TO-RIGHT OVERRIDE
-<U202E> IGNORE;IGNORE;IGNORE;IGNORE % RIGHT-TO-LEFT OVERRIDE
-<U2060> IGNORE;IGNORE;IGNORE;IGNORE % WORD JOINER
-<U2066> IGNORE;IGNORE;IGNORE;IGNORE % LEFT-TO-RIGHT ISOLATE
-<U2067> IGNORE;IGNORE;IGNORE;IGNORE % RIGHT-TO-LEFT ISOLATE
-<U2068> IGNORE;IGNORE;IGNORE;IGNORE % FIRST STRONG ISOLATE
-<U2069> IGNORE;IGNORE;IGNORE;IGNORE % POP DIRECTIONAL ISOLATE
-<U206A> IGNORE;IGNORE;IGNORE;IGNORE % INHIBIT SYMMETRIC SWAPPING
-<U206B> IGNORE;IGNORE;IGNORE;IGNORE % ACTIVATE SYMMETRIC SWAPPING
-<U206C> IGNORE;IGNORE;IGNORE;IGNORE % INHIBIT ARABIC FORM SHAPING
-<U206D> IGNORE;IGNORE;IGNORE;IGNORE % ACTIVATE ARABIC FORM SHAPING
-<U206E> IGNORE;IGNORE;IGNORE;IGNORE % NATIONAL DIGIT SHAPES
-<U206F> IGNORE;IGNORE;IGNORE;IGNORE % NOMINAL DIGIT SHAPES
-<UFE00> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-1
-<UFE01> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-2
-<UFE02> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-3
-<UFE03> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-4
-<UFE04> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-5
-<UFE05> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-6
-<UFE06> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-7
-<UFE07> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-8
-<UFE08> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-9
-<UFE09> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-10
-<UFE0A> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-11
-<UFE0B> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-12
-<UFE0C> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-13
-<UFE0D> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-14
-<UFE0E> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-15
-<UFE0F> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-16
-<UFEFF> IGNORE;IGNORE;IGNORE;IGNORE % ZERO WIDTH NO-BREAK SPACE
-<UFFF9> IGNORE;IGNORE;IGNORE;IGNORE % INTERLINEAR ANNOTATION ANCHOR
-<UFFFA> IGNORE;IGNORE;IGNORE;IGNORE % INTERLINEAR ANNOTATION SEPARATOR
-<UFFFB> IGNORE;IGNORE;IGNORE;IGNORE % INTERLINEAR ANNOTATION TERMINATOR
-<U0001BCA0> IGNORE;IGNORE;IGNORE;IGNORE % SHORTHAND FORMAT LETTER OVERLAP
-<U0001BCA1> IGNORE;IGNORE;IGNORE;IGNORE % SHORTHAND FORMAT CONTINUING OVERLAP
-<U0001BCA2> IGNORE;IGNORE;IGNORE;IGNORE % SHORTHAND FORMAT DOWN STEP
-<U0001BCA3> IGNORE;IGNORE;IGNORE;IGNORE % SHORTHAND FORMAT UP STEP
-<U0001D173> IGNORE;IGNORE;IGNORE;IGNORE % MUSICAL SYMBOL BEGIN BEAM
-<U0001D174> IGNORE;IGNORE;IGNORE;IGNORE % MUSICAL SYMBOL END BEAM
-<U0001D175> IGNORE;IGNORE;IGNORE;IGNORE % MUSICAL SYMBOL BEGIN TIE
-<U0001D176> IGNORE;IGNORE;IGNORE;IGNORE % MUSICAL SYMBOL END TIE
-<U0001D177> IGNORE;IGNORE;IGNORE;IGNORE % MUSICAL SYMBOL BEGIN SLUR
-<U0001D178> IGNORE;IGNORE;IGNORE;IGNORE % MUSICAL SYMBOL END SLUR
-<U0001D179> IGNORE;IGNORE;IGNORE;IGNORE % MUSICAL SYMBOL BEGIN PHRASE
-<U0001D17A> IGNORE;IGNORE;IGNORE;IGNORE % MUSICAL SYMBOL END PHRASE
-<U000E0001> IGNORE;IGNORE;IGNORE;IGNORE % LANGUAGE TAG
-<U000E0020> IGNORE;IGNORE;IGNORE;IGNORE % TAG SPACE
-<U000E0021> IGNORE;IGNORE;IGNORE;IGNORE % TAG EXCLAMATION MARK
-<U000E0022> IGNORE;IGNORE;IGNORE;IGNORE % TAG QUOTATION MARK
-<U000E0023> IGNORE;IGNORE;IGNORE;IGNORE % TAG NUMBER SIGN
-<U000E0024> IGNORE;IGNORE;IGNORE;IGNORE % TAG DOLLAR SIGN
-<U000E0025> IGNORE;IGNORE;IGNORE;IGNORE % TAG PERCENT SIGN
-<U000E0026> IGNORE;IGNORE;IGNORE;IGNORE % TAG AMPERSAND
-<U000E0027> IGNORE;IGNORE;IGNORE;IGNORE % TAG APOSTROPHE
-<U000E0028> IGNORE;IGNORE;IGNORE;IGNORE % TAG LEFT PARENTHESIS
-<U000E0029> IGNORE;IGNORE;IGNORE;IGNORE % TAG RIGHT PARENTHESIS
-<U000E002A> IGNORE;IGNORE;IGNORE;IGNORE % TAG ASTERISK
-<U000E002B> IGNORE;IGNORE;IGNORE;IGNORE % TAG PLUS SIGN
-<U000E002C> IGNORE;IGNORE;IGNORE;IGNORE % TAG COMMA
-<U000E002D> IGNORE;IGNORE;IGNORE;IGNORE % TAG HYPHEN-MINUS
-<U000E002E> IGNORE;IGNORE;IGNORE;IGNORE % TAG FULL STOP
-<U000E002F> IGNORE;IGNORE;IGNORE;IGNORE % TAG SOLIDUS
-<U000E0030> IGNORE;IGNORE;IGNORE;IGNORE % TAG DIGIT ZERO
-<U000E0031> IGNORE;IGNORE;IGNORE;IGNORE % TAG DIGIT ONE
-<U000E0032> IGNORE;IGNORE;IGNORE;IGNORE % TAG DIGIT TWO
-<U000E0033> IGNORE;IGNORE;IGNORE;IGNORE % TAG DIGIT THREE
-<U000E0034> IGNORE;IGNORE;IGNORE;IGNORE % TAG DIGIT FOUR
-<U000E0035> IGNORE;IGNORE;IGNORE;IGNORE % TAG DIGIT FIVE
-<U000E0036> IGNORE;IGNORE;IGNORE;IGNORE % TAG DIGIT SIX
-<U000E0037> IGNORE;IGNORE;IGNORE;IGNORE % TAG DIGIT SEVEN
-<U000E0038> IGNORE;IGNORE;IGNORE;IGNORE % TAG DIGIT EIGHT
-<U000E0039> IGNORE;IGNORE;IGNORE;IGNORE % TAG DIGIT NINE
-<U000E003A> IGNORE;IGNORE;IGNORE;IGNORE % TAG COLON
-<U000E003B> IGNORE;IGNORE;IGNORE;IGNORE % TAG SEMICOLON
-<U000E003C> IGNORE;IGNORE;IGNORE;IGNORE % TAG LESS-THAN SIGN
-<U000E003D> IGNORE;IGNORE;IGNORE;IGNORE % TAG EQUALS SIGN
-<U000E003E> IGNORE;IGNORE;IGNORE;IGNORE % TAG GREATER-THAN SIGN
-<U000E003F> IGNORE;IGNORE;IGNORE;IGNORE % TAG QUESTION MARK
-<U000E0040> IGNORE;IGNORE;IGNORE;IGNORE % TAG COMMERCIAL AT
-<U000E0041> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN CAPITAL LETTER A
-<U000E0042> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN CAPITAL LETTER B
-<U000E0043> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN CAPITAL LETTER C
-<U000E0044> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN CAPITAL LETTER D
-<U000E0045> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN CAPITAL LETTER E
-<U000E0046> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN CAPITAL LETTER F
-<U000E0047> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN CAPITAL LETTER G
-<U000E0048> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN CAPITAL LETTER H
-<U000E0049> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN CAPITAL LETTER I
-<U000E004A> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN CAPITAL LETTER J
-<U000E004B> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN CAPITAL LETTER K
-<U000E004C> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN CAPITAL LETTER L
-<U000E004D> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN CAPITAL LETTER M
-<U000E004E> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN CAPITAL LETTER N
-<U000E004F> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN CAPITAL LETTER O
-<U000E0050> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN CAPITAL LETTER P
-<U000E0051> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN CAPITAL LETTER Q
-<U000E0052> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN CAPITAL LETTER R
-<U000E0053> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN CAPITAL LETTER S
-<U000E0054> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN CAPITAL LETTER T
-<U000E0055> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN CAPITAL LETTER U
-<U000E0056> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN CAPITAL LETTER V
-<U000E0057> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN CAPITAL LETTER W
-<U000E0058> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN CAPITAL LETTER X
-<U000E0059> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN CAPITAL LETTER Y
-<U000E005A> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN CAPITAL LETTER Z
-<U000E005B> IGNORE;IGNORE;IGNORE;IGNORE % TAG LEFT SQUARE BRACKET
-<U000E005C> IGNORE;IGNORE;IGNORE;IGNORE % TAG REVERSE SOLIDUS
-<U000E005D> IGNORE;IGNORE;IGNORE;IGNORE % TAG RIGHT SQUARE BRACKET
-<U000E005E> IGNORE;IGNORE;IGNORE;IGNORE % TAG CIRCUMFLEX ACCENT
-<U000E005F> IGNORE;IGNORE;IGNORE;IGNORE % TAG LOW LINE
-<U000E0060> IGNORE;IGNORE;IGNORE;IGNORE % TAG GRAVE ACCENT
-<U000E0061> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN SMALL LETTER A
-<U000E0062> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN SMALL LETTER B
-<U000E0063> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN SMALL LETTER C
-<U000E0064> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN SMALL LETTER D
-<U000E0065> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN SMALL LETTER E
-<U000E0066> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN SMALL LETTER F
-<U000E0067> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN SMALL LETTER G
-<U000E0068> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN SMALL LETTER H
-<U000E0069> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN SMALL LETTER I
-<U000E006A> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN SMALL LETTER J
-<U000E006B> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN SMALL LETTER K
-<U000E006C> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN SMALL LETTER L
-<U000E006D> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN SMALL LETTER M
-<U000E006E> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN SMALL LETTER N
-<U000E006F> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN SMALL LETTER O
-<U000E0070> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN SMALL LETTER P
-<U000E0071> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN SMALL LETTER Q
-<U000E0072> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN SMALL LETTER R
-<U000E0073> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN SMALL LETTER S
-<U000E0074> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN SMALL LETTER T
-<U000E0075> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN SMALL LETTER U
-<U000E0076> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN SMALL LETTER V
-<U000E0077> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN SMALL LETTER W
-<U000E0078> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN SMALL LETTER X
-<U000E0079> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN SMALL LETTER Y
-<U000E007A> IGNORE;IGNORE;IGNORE;IGNORE % TAG LATIN SMALL LETTER Z
-<U000E007B> IGNORE;IGNORE;IGNORE;IGNORE % TAG LEFT CURLY BRACKET
-<U000E007C> IGNORE;IGNORE;IGNORE;IGNORE % TAG VERTICAL LINE
-<U000E007D> IGNORE;IGNORE;IGNORE;IGNORE % TAG RIGHT CURLY BRACKET
-<U000E007E> IGNORE;IGNORE;IGNORE;IGNORE % TAG TILDE
-<U000E007F> IGNORE;IGNORE;IGNORE;IGNORE % CANCEL TAG
-<U000E0100> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-17
-<U000E0101> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-18
-<U000E0102> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-19
-<U000E0103> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-20
-<U000E0104> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-21
-<U000E0105> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-22
-<U000E0106> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-23
-<U000E0107> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-24
-<U000E0108> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-25
-<U000E0109> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-26
-<U000E010A> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-27
-<U000E010B> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-28
-<U000E010C> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-29
-<U000E010D> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-30
-<U000E010E> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-31
-<U000E010F> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-32
-<U000E0110> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-33
-<U000E0111> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-34
-<U000E0112> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-35
-<U000E0113> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-36
-<U000E0114> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-37
-<U000E0115> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-38
-<U000E0116> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-39
-<U000E0117> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-40
-<U000E0118> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-41
-<U000E0119> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-42
-<U000E011A> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-43
-<U000E011B> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-44
-<U000E011C> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-45
-<U000E011D> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-46
-<U000E011E> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-47
-<U000E011F> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-48
-<U000E0120> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-49
-<U000E0121> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-50
-<U000E0122> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-51
-<U000E0123> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-52
-<U000E0124> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-53
-<U000E0125> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-54
-<U000E0126> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-55
-<U000E0127> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-56
-<U000E0128> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-57
-<U000E0129> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-58
-<U000E012A> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-59
-<U000E012B> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-60
-<U000E012C> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-61
-<U000E012D> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-62
-<U000E012E> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-63
-<U000E012F> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-64
-<U000E0130> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-65
-<U000E0131> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-66
-<U000E0132> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-67
-<U000E0133> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-68
-<U000E0134> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-69
-<U000E0135> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-70
-<U000E0136> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-71
-<U000E0137> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-72
-<U000E0138> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-73
-<U000E0139> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-74
-<U000E013A> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-75
-<U000E013B> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-76
-<U000E013C> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-77
-<U000E013D> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-78
-<U000E013E> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-79
-<U000E013F> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-80
-<U000E0140> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-81
-<U000E0141> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-82
-<U000E0142> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-83
-<U000E0143> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-84
-<U000E0144> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-85
-<U000E0145> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-86
-<U000E0146> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-87
-<U000E0147> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-88
-<U000E0148> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-89
-<U000E0149> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-90
-<U000E014A> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-91
-<U000E014B> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-92
-<U000E014C> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-93
-<U000E014D> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-94
-<U000E014E> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-95
-<U000E014F> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-96
-<U000E0150> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-97
-<U000E0151> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-98
-<U000E0152> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-99
-<U000E0153> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-100
-<U000E0154> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-101
-<U000E0155> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-102
-<U000E0156> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-103
-<U000E0157> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-104
-<U000E0158> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-105
-<U000E0159> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-106
-<U000E015A> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-107
-<U000E015B> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-108
-<U000E015C> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-109
-<U000E015D> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-110
-<U000E015E> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-111
-<U000E015F> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-112
-<U000E0160> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-113
-<U000E0161> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-114
-<U000E0162> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-115
-<U000E0163> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-116
-<U000E0164> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-117
-<U000E0165> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-118
-<U000E0166> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-119
-<U000E0167> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-120
-<U000E0168> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-121
-<U000E0169> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-122
-<U000E016A> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-123
-<U000E016B> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-124
-<U000E016C> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-125
-<U000E016D> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-126
-<U000E016E> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-127
-<U000E016F> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-128
-<U000E0170> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-129
-<U000E0171> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-130
-<U000E0172> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-131
-<U000E0173> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-132
-<U000E0174> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-133
-<U000E0175> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-134
-<U000E0176> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-135
-<U000E0177> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-136
-<U000E0178> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-137
-<U000E0179> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-138
-<U000E017A> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-139
-<U000E017B> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-140
-<U000E017C> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-141
-<U000E017D> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-142
-<U000E017E> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-143
-<U000E017F> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-144
-<U000E0180> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-145
-<U000E0181> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-146
-<U000E0182> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-147
-<U000E0183> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-148
-<U000E0184> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-149
-<U000E0185> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-150
-<U000E0186> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-151
-<U000E0187> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-152
-<U000E0188> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-153
-<U000E0189> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-154
-<U000E018A> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-155
-<U000E018B> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-156
-<U000E018C> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-157
-<U000E018D> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-158
-<U000E018E> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-159
-<U000E018F> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-160
-<U000E0190> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-161
-<U000E0191> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-162
-<U000E0192> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-163
-<U000E0193> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-164
-<U000E0194> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-165
-<U000E0195> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-166
-<U000E0196> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-167
-<U000E0197> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-168
-<U000E0198> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-169
-<U000E0199> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-170
-<U000E019A> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-171
-<U000E019B> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-172
-<U000E019C> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-173
-<U000E019D> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-174
-<U000E019E> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-175
-<U000E019F> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-176
-<U000E01A0> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-177
-<U000E01A1> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-178
-<U000E01A2> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-179
-<U000E01A3> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-180
-<U000E01A4> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-181
-<U000E01A5> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-182
-<U000E01A6> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-183
-<U000E01A7> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-184
-<U000E01A8> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-185
-<U000E01A9> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-186
-<U000E01AA> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-187
-<U000E01AB> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-188
-<U000E01AC> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-189
-<U000E01AD> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-190
-<U000E01AE> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-191
-<U000E01AF> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-192
-<U000E01B0> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-193
-<U000E01B1> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-194
-<U000E01B2> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-195
-<U000E01B3> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-196
-<U000E01B4> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-197
-<U000E01B5> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-198
-<U000E01B6> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-199
-<U000E01B7> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-200
-<U000E01B8> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-201
-<U000E01B9> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-202
-<U000E01BA> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-203
-<U000E01BB> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-204
-<U000E01BC> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-205
-<U000E01BD> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-206
-<U000E01BE> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-207
-<U000E01BF> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-208
-<U000E01C0> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-209
-<U000E01C1> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-210
-<U000E01C2> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-211
-<U000E01C3> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-212
-<U000E01C4> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-213
-<U000E01C5> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-214
-<U000E01C6> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-215
-<U000E01C7> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-216
-<U000E01C8> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-217
-<U000E01C9> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-218
-<U000E01CA> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-219
-<U000E01CB> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-220
-<U000E01CC> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-221
-<U000E01CD> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-222
-<U000E01CE> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-223
-<U000E01CF> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-224
-<U000E01D0> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-225
-<U000E01D1> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-226
-<U000E01D2> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-227
-<U000E01D3> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-228
-<U000E01D4> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-229
-<U000E01D5> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-230
-<U000E01D6> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-231
-<U000E01D7> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-232
-<U000E01D8> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-233
-<U000E01D9> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-234
-<U000E01DA> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-235
-<U000E01DB> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-236
-<U000E01DC> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-237
-<U000E01DD> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-238
-<U000E01DE> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-239
-<U000E01DF> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-240
-<U000E01E0> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-241
-<U000E01E1> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-242
-<U000E01E2> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-243
-<U000E01E3> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-244
-<U000E01E4> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-245
-<U000E01E5> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-246
-<U000E01E6> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-247
-<U000E01E7> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-248
-<U000E01E8> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-249
-<U000E01E9> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-250
-<U000E01EA> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-251
-<U000E01EB> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-252
-<U000E01EC> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-253
-<U000E01ED> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-254
-<U000E01EE> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-255
-<U000E01EF> IGNORE;IGNORE;IGNORE;IGNORE % VARIATION SELECTOR-256
+<U0000> IGNORE;IGNORE;IGNORE;<U0000> % NULL (in ISO 6429)
+<U0001> IGNORE;IGNORE;IGNORE;<U0001> % START OF HEADING (in ISO 6429)
+<U0002> IGNORE;IGNORE;IGNORE;<U0002> % START OF TEXT (in ISO 6429)
+<U0003> IGNORE;IGNORE;IGNORE;<U0003> % END OF TEXT (in ISO 6429)
+<U0004> IGNORE;IGNORE;IGNORE;<U0004> % END OF TRANSMISSION (in ISO 6429)
+<U0005> IGNORE;IGNORE;IGNORE;<U0005> % ENQUIRY (in ISO 6429)
+<U0006> IGNORE;IGNORE;IGNORE;<U0006> % ACKNOWLEDGE (in ISO 6429)
+<U0007> IGNORE;IGNORE;IGNORE;<U0007> % BELL (in ISO 6429)
+<U0008> IGNORE;IGNORE;IGNORE;<U0008> % BACKSPACE (in ISO 6429)
+<U000E> IGNORE;IGNORE;IGNORE;<U000E> % SHIFT OUT (in ISO 6429)
+<U000F> IGNORE;IGNORE;IGNORE;<U000F> % SHIFT IN (in ISO 6429)
+<U0010> IGNORE;IGNORE;IGNORE;<U0010> % DATA LINK ESCAPE (in ISO 6429)
+<U0011> IGNORE;IGNORE;IGNORE;<U0011> % DEVICE CONTROL ONE (in ISO 6429)
+<U0012> IGNORE;IGNORE;IGNORE;<U0012> % DEVICE CONTROL TWO (in ISO 6429)
+<U0013> IGNORE;IGNORE;IGNORE;<U0013> % DEVICE CONTROL THREE (in ISO 6429)
+<U0014> IGNORE;IGNORE;IGNORE;<U0014> % DEVICE CONTROL FOUR (in ISO 6429)
+<U0015> IGNORE;IGNORE;IGNORE;<U0015> % NEGATIVE ACKNOWLEDGE (in ISO 6429)
+<U0016> IGNORE;IGNORE;IGNORE;<U0016> % SYNCHRONOUS IDLE (in ISO 6429)
+<U0017> IGNORE;IGNORE;IGNORE;<U0017> % END OF TRANSMISSION BLOCK (in ISO 6429)
+<U0018> IGNORE;IGNORE;IGNORE;<U0018> % CANCEL (in ISO 6429)
+<U0019> IGNORE;IGNORE;IGNORE;<U0019> % END OF MEDIUM (in ISO 6429)
+<U001A> IGNORE;IGNORE;IGNORE;<U001A> % SUBSTITUTE (in ISO 6429)
+<U001B> IGNORE;IGNORE;IGNORE;<U001B> % ESCAPE (in ISO 6429)
+<U001C> IGNORE;IGNORE;IGNORE;<U001C> % FILE SEPARATOR (in ISO 6429)
+<U001D> IGNORE;IGNORE;IGNORE;<U001D> % GROUP SEPARATOR (in ISO 6429)
+<U001E> IGNORE;IGNORE;IGNORE;<U001E> % RECORD SEPARATOR (in ISO 6429)
+<U001F> IGNORE;IGNORE;IGNORE;<U001F> % UNIT SEPARATOR (in ISO 6429)
+<U007F> IGNORE;IGNORE;IGNORE;<U007F> % DELETE (in ISO 6429)
+<U0080> IGNORE;IGNORE;IGNORE;<U0080> % <control>
+<U0081> IGNORE;IGNORE;IGNORE;<U0081> % <control>
+<U0082> IGNORE;IGNORE;IGNORE;<U0082> % BREAK PERMITTED HERE (in ISO 6429)
+<U0083> IGNORE;IGNORE;IGNORE;<U0083> % NO BREAK HERE (in ISO 6429)
+<U0084> IGNORE;IGNORE;IGNORE;<U0084> % <control>
+<U0086> IGNORE;IGNORE;IGNORE;<U0086> % START OF SELECTED AREA (in ISO 6429)
+<U0087> IGNORE;IGNORE;IGNORE;<U0087> % END OF SELECTED AREA (in ISO 6429)
+<U0088> IGNORE;IGNORE;IGNORE;<U0088> % CHARACTER TABULATION SET (in ISO 6429)
+<U0089> IGNORE;IGNORE;IGNORE;<U0089> % CHARACTER TABULATION WITH JUSTIFICATION (in ISO 6429)
+<U008A> IGNORE;IGNORE;IGNORE;<U008A> % LINE TABULATION SET (in ISO 6429)
+<U008B> IGNORE;IGNORE;IGNORE;<U008B> % PARTIAL LINE FORWARD (in ISO 6429)
+<U008C> IGNORE;IGNORE;IGNORE;<U008C> % PARTIAL LINE BACKWARD (in ISO 6429)
+<U008D> IGNORE;IGNORE;IGNORE;<U008D> % PARTIAL LINE FEED (in ISO 6429)
+<U008E> IGNORE;IGNORE;IGNORE;<U008E> % SINGLE SHIFT TWO (in ISO 6429)
+<U008F> IGNORE;IGNORE;IGNORE;<U008F> % SINGLE SHIFT THREE (in ISO 6429)
+<U0090> IGNORE;IGNORE;IGNORE;<U0090> % DEVICE CONTROL STRING (in ISO 6429)
+<U0091> IGNORE;IGNORE;IGNORE;<U0091> % PRIVATE USE ONE (in ISO 6429)
+<U0092> IGNORE;IGNORE;IGNORE;<U0092> % PRIVATE USE TWO (in ISO 6429)
+<U0093> IGNORE;IGNORE;IGNORE;<U0093> % SET TRANSMIT STATE (in ISO 6429)
+<U0094> IGNORE;IGNORE;IGNORE;<U0094> % CANCEL CHARACTER (in ISO 6429)
+<U0095> IGNORE;IGNORE;IGNORE;<U0095> % MESSAGE WAITING (in ISO 6429)
+<U0096> IGNORE;IGNORE;IGNORE;<U0096> % START OF GUARDED AREA (in ISO 6429)
+<U0097> IGNORE;IGNORE;IGNORE;<U0097> % END OF GUARDED AREA (in ISO 6429)
+<U0098> IGNORE;IGNORE;IGNORE;<U0098> % START OF STRING (in ISO 6429)
+<U0099> IGNORE;IGNORE;IGNORE;<U0099> % <control>
+<U009A> IGNORE;IGNORE;IGNORE;<U009A> % SINGLE CHARACTER INTRODUCER (in ISO 6429)
+<U009B> IGNORE;IGNORE;IGNORE;<U009B> % CONTROL SEQUENCE INTRODUCER (in ISO 6429)
+<U009C> IGNORE;IGNORE;IGNORE;<U009C> % STRING TERMINATOR (in ISO 6429)
+<U009D> IGNORE;IGNORE;IGNORE;<U009D> % OPERATING SYSTEM COMMAND (in ISO 6429)
+<U009E> IGNORE;IGNORE;IGNORE;<U009E> % PRIVACY MESSAGE (in ISO 6429)
+<U009F> IGNORE;IGNORE;IGNORE;<U009F> % APPLICATION PROGRAM COMMAND (in ISO 6429)
+<U00AD> IGNORE;IGNORE;IGNORE;<U00AD> % SOFT HYPHEN
+<U061C> IGNORE;IGNORE;IGNORE;<U061C> % ARABIC LETTER MARK
+<U070F> IGNORE;IGNORE;IGNORE;<U070F> % SYRIAC ABBREVIATION MARK
+<U08E2> IGNORE;IGNORE;IGNORE;<U08E2> % ARABIC DISPUTED END OF AYAH
+<U180B> IGNORE;IGNORE;IGNORE;<U180B> % MONGOLIAN FREE VARIATION SELECTOR ONE
+<U180C> IGNORE;IGNORE;IGNORE;<U180C> % MONGOLIAN FREE VARIATION SELECTOR TWO
+<U180D> IGNORE;IGNORE;IGNORE;<U180D> % MONGOLIAN FREE VARIATION SELECTOR THREE
+<U180E> IGNORE;IGNORE;IGNORE;<U180E> % MONGOLIAN VOWEL SEPARATOR
+<U200B> IGNORE;IGNORE;IGNORE;<U200B> % ZERO WIDTH SPACE
+<U200C> IGNORE;IGNORE;IGNORE;<U200C> % ZERO WIDTH NON-JOINER
+<U200D> IGNORE;IGNORE;IGNORE;<U200D> % ZERO WIDTH JOINER
+<U200E> IGNORE;IGNORE;IGNORE;<U200E> % LEFT-TO-RIGHT MARK
+<U200F> IGNORE;IGNORE;IGNORE;<U200F> % RIGHT-TO-LEFT MARK
+<U202A> IGNORE;IGNORE;IGNORE;<U202A> % LEFT-TO-RIGHT EMBEDDING
+<U202B> IGNORE;IGNORE;IGNORE;<U202B> % RIGHT-TO-LEFT EMBEDDING
+<U202C> IGNORE;IGNORE;IGNORE;<U202C> % POP DIRECTIONAL FORMATTING
+<U202D> IGNORE;IGNORE;IGNORE;<U202D> % LEFT-TO-RIGHT OVERRIDE
+<U202E> IGNORE;IGNORE;IGNORE;<U202E> % RIGHT-TO-LEFT OVERRIDE
+<U2060> IGNORE;IGNORE;IGNORE;<U2060> % WORD JOINER
+<U2066> IGNORE;IGNORE;IGNORE;<U2066> % LEFT-TO-RIGHT ISOLATE
+<U2067> IGNORE;IGNORE;IGNORE;<U2067> % RIGHT-TO-LEFT ISOLATE
+<U2068> IGNORE;IGNORE;IGNORE;<U2068> % FIRST STRONG ISOLATE
+<U2069> IGNORE;IGNORE;IGNORE;<U2069> % POP DIRECTIONAL ISOLATE
+<U206A> IGNORE;IGNORE;IGNORE;<U206A> % INHIBIT SYMMETRIC SWAPPING
+<U206B> IGNORE;IGNORE;IGNORE;<U206B> % ACTIVATE SYMMETRIC SWAPPING
+<U206C> IGNORE;IGNORE;IGNORE;<U206C> % INHIBIT ARABIC FORM SHAPING
+<U206D> IGNORE;IGNORE;IGNORE;<U206D> % ACTIVATE ARABIC FORM SHAPING
+<U206E> IGNORE;IGNORE;IGNORE;<U206E> % NATIONAL DIGIT SHAPES
+<U206F> IGNORE;IGNORE;IGNORE;<U206F> % NOMINAL DIGIT SHAPES
+<UFE00> IGNORE;IGNORE;IGNORE;<UFE00> % VARIATION SELECTOR-1
+<UFE01> IGNORE;IGNORE;IGNORE;<UFE01> % VARIATION SELECTOR-2
+<UFE02> IGNORE;IGNORE;IGNORE;<UFE02> % VARIATION SELECTOR-3
+<UFE03> IGNORE;IGNORE;IGNORE;<UFE03> % VARIATION SELECTOR-4
+<UFE04> IGNORE;IGNORE;IGNORE;<UFE04> % VARIATION SELECTOR-5
+<UFE05> IGNORE;IGNORE;IGNORE;<UFE05> % VARIATION SELECTOR-6
+<UFE06> IGNORE;IGNORE;IGNORE;<UFE06> % VARIATION SELECTOR-7
+<UFE07> IGNORE;IGNORE;IGNORE;<UFE07> % VARIATION SELECTOR-8
+<UFE08> IGNORE;IGNORE;IGNORE;<UFE08> % VARIATION SELECTOR-9
+<UFE09> IGNORE;IGNORE;IGNORE;<UFE09> % VARIATION SELECTOR-10
+<UFE0A> IGNORE;IGNORE;IGNORE;<UFE0A> % VARIATION SELECTOR-11
+<UFE0B> IGNORE;IGNORE;IGNORE;<UFE0B> % VARIATION SELECTOR-12
+<UFE0C> IGNORE;IGNORE;IGNORE;<UFE0C> % VARIATION SELECTOR-13
+<UFE0D> IGNORE;IGNORE;IGNORE;<UFE0D> % VARIATION SELECTOR-14
+<UFE0E> IGNORE;IGNORE;IGNORE;<UFE0E> % VARIATION SELECTOR-15
+<UFE0F> IGNORE;IGNORE;IGNORE;<UFE0F> % VARIATION SELECTOR-16
+<UFEFF> IGNORE;IGNORE;IGNORE;<UFEFF> % ZERO WIDTH NO-BREAK SPACE
+<UFFF9> IGNORE;IGNORE;IGNORE;<UFFF9> % INTERLINEAR ANNOTATION ANCHOR
+<UFFFA> IGNORE;IGNORE;IGNORE;<UFFFA> % INTERLINEAR ANNOTATION SEPARATOR
+<UFFFB> IGNORE;IGNORE;IGNORE;<UFFFB> % INTERLINEAR ANNOTATION TERMINATOR
+<U0001BCA0> IGNORE;IGNORE;IGNORE;<U0001BCA0> % SHORTHAND FORMAT LETTER OVERLAP
+<U0001BCA1> IGNORE;IGNORE;IGNORE;<U0001BCA1> % SHORTHAND FORMAT CONTINUING OVERLAP
+<U0001BCA2> IGNORE;IGNORE;IGNORE;<U0001BCA2> % SHORTHAND FORMAT DOWN STEP
+<U0001BCA3> IGNORE;IGNORE;IGNORE;<U0001BCA3> % SHORTHAND FORMAT UP STEP
+<U0001D173> IGNORE;IGNORE;IGNORE;<U0001D173> % MUSICAL SYMBOL BEGIN BEAM
+<U0001D174> IGNORE;IGNORE;IGNORE;<U0001D174> % MUSICAL SYMBOL END BEAM
+<U0001D175> IGNORE;IGNORE;IGNORE;<U0001D175> % MUSICAL SYMBOL BEGIN TIE
+<U0001D176> IGNORE;IGNORE;IGNORE;<U0001D176> % MUSICAL SYMBOL END TIE
+<U0001D177> IGNORE;IGNORE;IGNORE;<U0001D177> % MUSICAL SYMBOL BEGIN SLUR
+<U0001D178> IGNORE;IGNORE;IGNORE;<U0001D178> % MUSICAL SYMBOL END SLUR
+<U0001D179> IGNORE;IGNORE;IGNORE;<U0001D179> % MUSICAL SYMBOL BEGIN PHRASE
+<U0001D17A> IGNORE;IGNORE;IGNORE;<U0001D17A> % MUSICAL SYMBOL END PHRASE
+<U000E0001> IGNORE;IGNORE;IGNORE;<U000E0001> % LANGUAGE TAG
+<U000E0020> IGNORE;IGNORE;IGNORE;<U000E0020> % TAG SPACE
+<U000E0021> IGNORE;IGNORE;IGNORE;<U000E0021> % TAG EXCLAMATION MARK
+<U000E0022> IGNORE;IGNORE;IGNORE;<U000E0022> % TAG QUOTATION MARK
+<U000E0023> IGNORE;IGNORE;IGNORE;<U000E0023> % TAG NUMBER SIGN
+<U000E0024> IGNORE;IGNORE;IGNORE;<U000E0024> % TAG DOLLAR SIGN
+<U000E0025> IGNORE;IGNORE;IGNORE;<U000E0025> % TAG PERCENT SIGN
+<U000E0026> IGNORE;IGNORE;IGNORE;<U000E0026> % TAG AMPERSAND
+<U000E0027> IGNORE;IGNORE;IGNORE;<U000E0027> % TAG APOSTROPHE
+<U000E0028> IGNORE;IGNORE;IGNORE;<U000E0028> % TAG LEFT PARENTHESIS
+<U000E0029> IGNORE;IGNORE;IGNORE;<U000E0029> % TAG RIGHT PARENTHESIS
+<U000E002A> IGNORE;IGNORE;IGNORE;<U000E002A> % TAG ASTERISK
+<U000E002B> IGNORE;IGNORE;IGNORE;<U000E002B> % TAG PLUS SIGN
+<U000E002C> IGNORE;IGNORE;IGNORE;<U000E002C> % TAG COMMA
+<U000E002D> IGNORE;IGNORE;IGNORE;<U000E002D> % TAG HYPHEN-MINUS
+<U000E002E> IGNORE;IGNORE;IGNORE;<U000E002E> % TAG FULL STOP
+<U000E002F> IGNORE;IGNORE;IGNORE;<U000E002F> % TAG SOLIDUS
+<U000E0030> IGNORE;IGNORE;IGNORE;<U000E0030> % TAG DIGIT ZERO
+<U000E0031> IGNORE;IGNORE;IGNORE;<U000E0031> % TAG DIGIT ONE
+<U000E0032> IGNORE;IGNORE;IGNORE;<U000E0032> % TAG DIGIT TWO
+<U000E0033> IGNORE;IGNORE;IGNORE;<U000E0033> % TAG DIGIT THREE
+<U000E0034> IGNORE;IGNORE;IGNORE;<U000E0034> % TAG DIGIT FOUR
+<U000E0035> IGNORE;IGNORE;IGNORE;<U000E0035> % TAG DIGIT FIVE
+<U000E0036> IGNORE;IGNORE;IGNORE;<U000E0036> % TAG DIGIT SIX
+<U000E0037> IGNORE;IGNORE;IGNORE;<U000E0037> % TAG DIGIT SEVEN
+<U000E0038> IGNORE;IGNORE;IGNORE;<U000E0038> % TAG DIGIT EIGHT
+<U000E0039> IGNORE;IGNORE;IGNORE;<U000E0039> % TAG DIGIT NINE
+<U000E003A> IGNORE;IGNORE;IGNORE;<U000E003A> % TAG COLON
+<U000E003B> IGNORE;IGNORE;IGNORE;<U000E003B> % TAG SEMICOLON
+<U000E003C> IGNORE;IGNORE;IGNORE;<U000E003C> % TAG LESS-THAN SIGN
+<U000E003D> IGNORE;IGNORE;IGNORE;<U000E003D> % TAG EQUALS SIGN
+<U000E003E> IGNORE;IGNORE;IGNORE;<U000E003E> % TAG GREATER-THAN SIGN
+<U000E003F> IGNORE;IGNORE;IGNORE;<U000E003F> % TAG QUESTION MARK
+<U000E0040> IGNORE;IGNORE;IGNORE;<U000E0040> % TAG COMMERCIAL AT
+<U000E0041> IGNORE;IGNORE;IGNORE;<U000E0041> % TAG LATIN CAPITAL LETTER A
+<U000E0042> IGNORE;IGNORE;IGNORE;<U000E0042> % TAG LATIN CAPITAL LETTER B
+<U000E0043> IGNORE;IGNORE;IGNORE;<U000E0043> % TAG LATIN CAPITAL LETTER C
+<U000E0044> IGNORE;IGNORE;IGNORE;<U000E0044> % TAG LATIN CAPITAL LETTER D
+<U000E0045> IGNORE;IGNORE;IGNORE;<U000E0045> % TAG LATIN CAPITAL LETTER E
+<U000E0046> IGNORE;IGNORE;IGNORE;<U000E0046> % TAG LATIN CAPITAL LETTER F
+<U000E0047> IGNORE;IGNORE;IGNORE;<U000E0047> % TAG LATIN CAPITAL LETTER G
+<U000E0048> IGNORE;IGNORE;IGNORE;<U000E0048> % TAG LATIN CAPITAL LETTER H
+<U000E0049> IGNORE;IGNORE;IGNORE;<U000E0049> % TAG LATIN CAPITAL LETTER I
+<U000E004A> IGNORE;IGNORE;IGNORE;<U000E004A> % TAG LATIN CAPITAL LETTER J
+<U000E004B> IGNORE;IGNORE;IGNORE;<U000E004B> % TAG LATIN CAPITAL LETTER K
+<U000E004C> IGNORE;IGNORE;IGNORE;<U000E004C> % TAG LATIN CAPITAL LETTER L
+<U000E004D> IGNORE;IGNORE;IGNORE;<U000E004D> % TAG LATIN CAPITAL LETTER M
+<U000E004E> IGNORE;IGNORE;IGNORE;<U000E004E> % TAG LATIN CAPITAL LETTER N
+<U000E004F> IGNORE;IGNORE;IGNORE;<U000E004F> % TAG LATIN CAPITAL LETTER O
+<U000E0050> IGNORE;IGNORE;IGNORE;<U000E0050> % TAG LATIN CAPITAL LETTER P
+<U000E0051> IGNORE;IGNORE;IGNORE;<U000E0051> % TAG LATIN CAPITAL LETTER Q
+<U000E0052> IGNORE;IGNORE;IGNORE;<U000E0052> % TAG LATIN CAPITAL LETTER R
+<U000E0053> IGNORE;IGNORE;IGNORE;<U000E0053> % TAG LATIN CAPITAL LETTER S
+<U000E0054> IGNORE;IGNORE;IGNORE;<U000E0054> % TAG LATIN CAPITAL LETTER T
+<U000E0055> IGNORE;IGNORE;IGNORE;<U000E0055> % TAG LATIN CAPITAL LETTER U
+<U000E0056> IGNORE;IGNORE;IGNORE;<U000E0056> % TAG LATIN CAPITAL LETTER V
+<U000E0057> IGNORE;IGNORE;IGNORE;<U000E0057> % TAG LATIN CAPITAL LETTER W
+<U000E0058> IGNORE;IGNORE;IGNORE;<U000E0058> % TAG LATIN CAPITAL LETTER X
+<U000E0059> IGNORE;IGNORE;IGNORE;<U000E0059> % TAG LATIN CAPITAL LETTER Y
+<U000E005A> IGNORE;IGNORE;IGNORE;<U000E005A> % TAG LATIN CAPITAL LETTER Z
+<U000E005B> IGNORE;IGNORE;IGNORE;<U000E005B> % TAG LEFT SQUARE BRACKET
+<U000E005C> IGNORE;IGNORE;IGNORE;<U000E005C> % TAG REVERSE SOLIDUS
+<U000E005D> IGNORE;IGNORE;IGNORE;<U000E005D> % TAG RIGHT SQUARE BRACKET
+<U000E005E> IGNORE;IGNORE;IGNORE;<U000E005E> % TAG CIRCUMFLEX ACCENT
+<U000E005F> IGNORE;IGNORE;IGNORE;<U000E005F> % TAG LOW LINE
+<U000E0060> IGNORE;IGNORE;IGNORE;<U000E0060> % TAG GRAVE ACCENT
+<U000E0061> IGNORE;IGNORE;IGNORE;<U000E0061> % TAG LATIN SMALL LETTER A
+<U000E0062> IGNORE;IGNORE;IGNORE;<U000E0062> % TAG LATIN SMALL LETTER B
+<U000E0063> IGNORE;IGNORE;IGNORE;<U000E0063> % TAG LATIN SMALL LETTER C
+<U000E0064> IGNORE;IGNORE;IGNORE;<U000E0064> % TAG LATIN SMALL LETTER D
+<U000E0065> IGNORE;IGNORE;IGNORE;<U000E0065> % TAG LATIN SMALL LETTER E
+<U000E0066> IGNORE;IGNORE;IGNORE;<U000E0066> % TAG LATIN SMALL LETTER F
+<U000E0067> IGNORE;IGNORE;IGNORE;<U000E0067> % TAG LATIN SMALL LETTER G
+<U000E0068> IGNORE;IGNORE;IGNORE;<U000E0068> % TAG LATIN SMALL LETTER H
+<U000E0069> IGNORE;IGNORE;IGNORE;<U000E0069> % TAG LATIN SMALL LETTER I
+<U000E006A> IGNORE;IGNORE;IGNORE;<U000E006A> % TAG LATIN SMALL LETTER J
+<U000E006B> IGNORE;IGNORE;IGNORE;<U000E006B> % TAG LATIN SMALL LETTER K
+<U000E006C> IGNORE;IGNORE;IGNORE;<U000E006C> % TAG LATIN SMALL LETTER L
+<U000E006D> IGNORE;IGNORE;IGNORE;<U000E006D> % TAG LATIN SMALL LETTER M
+<U000E006E> IGNORE;IGNORE;IGNORE;<U000E006E> % TAG LATIN SMALL LETTER N
+<U000E006F> IGNORE;IGNORE;IGNORE;<U000E006F> % TAG LATIN SMALL LETTER O
+<U000E0070> IGNORE;IGNORE;IGNORE;<U000E0070> % TAG LATIN SMALL LETTER P
+<U000E0071> IGNORE;IGNORE;IGNORE;<U000E0071> % TAG LATIN SMALL LETTER Q
+<U000E0072> IGNORE;IGNORE;IGNORE;<U000E0072> % TAG LATIN SMALL LETTER R
+<U000E0073> IGNORE;IGNORE;IGNORE;<U000E0073> % TAG LATIN SMALL LETTER S
+<U000E0074> IGNORE;IGNORE;IGNORE;<U000E0074> % TAG LATIN SMALL LETTER T
+<U000E0075> IGNORE;IGNORE;IGNORE;<U000E0075> % TAG LATIN SMALL LETTER U
+<U000E0076> IGNORE;IGNORE;IGNORE;<U000E0076> % TAG LATIN SMALL LETTER V
+<U000E0077> IGNORE;IGNORE;IGNORE;<U000E0077> % TAG LATIN SMALL LETTER W
+<U000E0078> IGNORE;IGNORE;IGNORE;<U000E0078> % TAG LATIN SMALL LETTER X
+<U000E0079> IGNORE;IGNORE;IGNORE;<U000E0079> % TAG LATIN SMALL LETTER Y
+<U000E007A> IGNORE;IGNORE;IGNORE;<U000E007A> % TAG LATIN SMALL LETTER Z
+<U000E007B> IGNORE;IGNORE;IGNORE;<U000E007B> % TAG LEFT CURLY BRACKET
+<U000E007C> IGNORE;IGNORE;IGNORE;<U000E007C> % TAG VERTICAL LINE
+<U000E007D> IGNORE;IGNORE;IGNORE;<U000E007D> % TAG RIGHT CURLY BRACKET
+<U000E007E> IGNORE;IGNORE;IGNORE;<U000E007E> % TAG TILDE
+<U000E007F> IGNORE;IGNORE;IGNORE;<U000E007F> % CANCEL TAG
+<U000E0100> IGNORE;IGNORE;IGNORE;<U000E0100> % VARIATION SELECTOR-17
+<U000E0101> IGNORE;IGNORE;IGNORE;<U000E0101> % VARIATION SELECTOR-18
+<U000E0102> IGNORE;IGNORE;IGNORE;<U000E0102> % VARIATION SELECTOR-19
+<U000E0103> IGNORE;IGNORE;IGNORE;<U000E0103> % VARIATION SELECTOR-20
+<U000E0104> IGNORE;IGNORE;IGNORE;<U000E0104> % VARIATION SELECTOR-21
+<U000E0105> IGNORE;IGNORE;IGNORE;<U000E0105> % VARIATION SELECTOR-22
+<U000E0106> IGNORE;IGNORE;IGNORE;<U000E0106> % VARIATION SELECTOR-23
+<U000E0107> IGNORE;IGNORE;IGNORE;<U000E0107> % VARIATION SELECTOR-24
+<U000E0108> IGNORE;IGNORE;IGNORE;<U000E0108> % VARIATION SELECTOR-25
+<U000E0109> IGNORE;IGNORE;IGNORE;<U000E0109> % VARIATION SELECTOR-26
+<U000E010A> IGNORE;IGNORE;IGNORE;<U000E010A> % VARIATION SELECTOR-27
+<U000E010B> IGNORE;IGNORE;IGNORE;<U000E010B> % VARIATION SELECTOR-28
+<U000E010C> IGNORE;IGNORE;IGNORE;<U000E010C> % VARIATION SELECTOR-29
+<U000E010D> IGNORE;IGNORE;IGNORE;<U000E010D> % VARIATION SELECTOR-30
+<U000E010E> IGNORE;IGNORE;IGNORE;<U000E010E> % VARIATION SELECTOR-31
+<U000E010F> IGNORE;IGNORE;IGNORE;<U000E010F> % VARIATION SELECTOR-32
+<U000E0110> IGNORE;IGNORE;IGNORE;<U000E0110> % VARIATION SELECTOR-33
+<U000E0111> IGNORE;IGNORE;IGNORE;<U000E0111> % VARIATION SELECTOR-34
+<U000E0112> IGNORE;IGNORE;IGNORE;<U000E0112> % VARIATION SELECTOR-35
+<U000E0113> IGNORE;IGNORE;IGNORE;<U000E0113> % VARIATION SELECTOR-36
+<U000E0114> IGNORE;IGNORE;IGNORE;<U000E0114> % VARIATION SELECTOR-37
+<U000E0115> IGNORE;IGNORE;IGNORE;<U000E0115> % VARIATION SELECTOR-38
+<U000E0116> IGNORE;IGNORE;IGNORE;<U000E0116> % VARIATION SELECTOR-39
+<U000E0117> IGNORE;IGNORE;IGNORE;<U000E0117> % VARIATION SELECTOR-40
+<U000E0118> IGNORE;IGNORE;IGNORE;<U000E0118> % VARIATION SELECTOR-41
+<U000E0119> IGNORE;IGNORE;IGNORE;<U000E0119> % VARIATION SELECTOR-42
+<U000E011A> IGNORE;IGNORE;IGNORE;<U000E011A> % VARIATION SELECTOR-43
+<U000E011B> IGNORE;IGNORE;IGNORE;<U000E011B> % VARIATION SELECTOR-44
+<U000E011C> IGNORE;IGNORE;IGNORE;<U000E011C> % VARIATION SELECTOR-45
+<U000E011D> IGNORE;IGNORE;IGNORE;<U000E011D> % VARIATION SELECTOR-46
+<U000E011E> IGNORE;IGNORE;IGNORE;<U000E011E> % VARIATION SELECTOR-47
+<U000E011F> IGNORE;IGNORE;IGNORE;<U000E011F> % VARIATION SELECTOR-48
+<U000E0120> IGNORE;IGNORE;IGNORE;<U000E0120> % VARIATION SELECTOR-49
+<U000E0121> IGNORE;IGNORE;IGNORE;<U000E0121> % VARIATION SELECTOR-50
+<U000E0122> IGNORE;IGNORE;IGNORE;<U000E0122> % VARIATION SELECTOR-51
+<U000E0123> IGNORE;IGNORE;IGNORE;<U000E0123> % VARIATION SELECTOR-52
+<U000E0124> IGNORE;IGNORE;IGNORE;<U000E0124> % VARIATION SELECTOR-53
+<U000E0125> IGNORE;IGNORE;IGNORE;<U000E0125> % VARIATION SELECTOR-54
+<U000E0126> IGNORE;IGNORE;IGNORE;<U000E0126> % VARIATION SELECTOR-55
+<U000E0127> IGNORE;IGNORE;IGNORE;<U000E0127> % VARIATION SELECTOR-56
+<U000E0128> IGNORE;IGNORE;IGNORE;<U000E0128> % VARIATION SELECTOR-57
+<U000E0129> IGNORE;IGNORE;IGNORE;<U000E0129> % VARIATION SELECTOR-58
+<U000E012A> IGNORE;IGNORE;IGNORE;<U000E012A> % VARIATION SELECTOR-59
+<U000E012B> IGNORE;IGNORE;IGNORE;<U000E012B> % VARIATION SELECTOR-60
+<U000E012C> IGNORE;IGNORE;IGNORE;<U000E012C> % VARIATION SELECTOR-61
+<U000E012D> IGNORE;IGNORE;IGNORE;<U000E012D> % VARIATION SELECTOR-62
+<U000E012E> IGNORE;IGNORE;IGNORE;<U000E012E> % VARIATION SELECTOR-63
+<U000E012F> IGNORE;IGNORE;IGNORE;<U000E012F> % VARIATION SELECTOR-64
+<U000E0130> IGNORE;IGNORE;IGNORE;<U000E0130> % VARIATION SELECTOR-65
+<U000E0131> IGNORE;IGNORE;IGNORE;<U000E0131> % VARIATION SELECTOR-66
+<U000E0132> IGNORE;IGNORE;IGNORE;<U000E0132> % VARIATION SELECTOR-67
+<U000E0133> IGNORE;IGNORE;IGNORE;<U000E0133> % VARIATION SELECTOR-68
+<U000E0134> IGNORE;IGNORE;IGNORE;<U000E0134> % VARIATION SELECTOR-69
+<U000E0135> IGNORE;IGNORE;IGNORE;<U000E0135> % VARIATION SELECTOR-70
+<U000E0136> IGNORE;IGNORE;IGNORE;<U000E0136> % VARIATION SELECTOR-71
+<U000E0137> IGNORE;IGNORE;IGNORE;<U000E0137> % VARIATION SELECTOR-72
+<U000E0138> IGNORE;IGNORE;IGNORE;<U000E0138> % VARIATION SELECTOR-73
+<U000E0139> IGNORE;IGNORE;IGNORE;<U000E0139> % VARIATION SELECTOR-74
+<U000E013A> IGNORE;IGNORE;IGNORE;<U000E013A> % VARIATION SELECTOR-75
+<U000E013B> IGNORE;IGNORE;IGNORE;<U000E013B> % VARIATION SELECTOR-76
+<U000E013C> IGNORE;IGNORE;IGNORE;<U000E013C> % VARIATION SELECTOR-77
+<U000E013D> IGNORE;IGNORE;IGNORE;<U000E013D> % VARIATION SELECTOR-78
+<U000E013E> IGNORE;IGNORE;IGNORE;<U000E013E> % VARIATION SELECTOR-79
+<U000E013F> IGNORE;IGNORE;IGNORE;<U000E013F> % VARIATION SELECTOR-80
+<U000E0140> IGNORE;IGNORE;IGNORE;<U000E0140> % VARIATION SELECTOR-81
+<U000E0141> IGNORE;IGNORE;IGNORE;<U000E0141> % VARIATION SELECTOR-82
+<U000E0142> IGNORE;IGNORE;IGNORE;<U000E0142> % VARIATION SELECTOR-83
+<U000E0143> IGNORE;IGNORE;IGNORE;<U000E0143> % VARIATION SELECTOR-84
+<U000E0144> IGNORE;IGNORE;IGNORE;<U000E0144> % VARIATION SELECTOR-85
+<U000E0145> IGNORE;IGNORE;IGNORE;<U000E0145> % VARIATION SELECTOR-86
+<U000E0146> IGNORE;IGNORE;IGNORE;<U000E0146> % VARIATION SELECTOR-87
+<U000E0147> IGNORE;IGNORE;IGNORE;<U000E0147> % VARIATION SELECTOR-88
+<U000E0148> IGNORE;IGNORE;IGNORE;<U000E0148> % VARIATION SELECTOR-89
+<U000E0149> IGNORE;IGNORE;IGNORE;<U000E0149> % VARIATION SELECTOR-90
+<U000E014A> IGNORE;IGNORE;IGNORE;<U000E014A> % VARIATION SELECTOR-91
+<U000E014B> IGNORE;IGNORE;IGNORE;<U000E014B> % VARIATION SELECTOR-92
+<U000E014C> IGNORE;IGNORE;IGNORE;<U000E014C> % VARIATION SELECTOR-93
+<U000E014D> IGNORE;IGNORE;IGNORE;<U000E014D> % VARIATION SELECTOR-94
+<U000E014E> IGNORE;IGNORE;IGNORE;<U000E014E> % VARIATION SELECTOR-95
+<U000E014F> IGNORE;IGNORE;IGNORE;<U000E014F> % VARIATION SELECTOR-96
+<U000E0150> IGNORE;IGNORE;IGNORE;<U000E0150> % VARIATION SELECTOR-97
+<U000E0151> IGNORE;IGNORE;IGNORE;<U000E0151> % VARIATION SELECTOR-98
+<U000E0152> IGNORE;IGNORE;IGNORE;<U000E0152> % VARIATION SELECTOR-99
+<U000E0153> IGNORE;IGNORE;IGNORE;<U000E0153> % VARIATION SELECTOR-100
+<U000E0154> IGNORE;IGNORE;IGNORE;<U000E0154> % VARIATION SELECTOR-101
+<U000E0155> IGNORE;IGNORE;IGNORE;<U000E0155> % VARIATION SELECTOR-102
+<U000E0156> IGNORE;IGNORE;IGNORE;<U000E0156> % VARIATION SELECTOR-103
+<U000E0157> IGNORE;IGNORE;IGNORE;<U000E0157> % VARIATION SELECTOR-104
+<U000E0158> IGNORE;IGNORE;IGNORE;<U000E0158> % VARIATION SELECTOR-105
+<U000E0159> IGNORE;IGNORE;IGNORE;<U000E0159> % VARIATION SELECTOR-106
+<U000E015A> IGNORE;IGNORE;IGNORE;<U000E015A> % VARIATION SELECTOR-107
+<U000E015B> IGNORE;IGNORE;IGNORE;<U000E015B> % VARIATION SELECTOR-108
+<U000E015C> IGNORE;IGNORE;IGNORE;<U000E015C> % VARIATION SELECTOR-109
+<U000E015D> IGNORE;IGNORE;IGNORE;<U000E015D> % VARIATION SELECTOR-110
+<U000E015E> IGNORE;IGNORE;IGNORE;<U000E015E> % VARIATION SELECTOR-111
+<U000E015F> IGNORE;IGNORE;IGNORE;<U000E015F> % VARIATION SELECTOR-112
+<U000E0160> IGNORE;IGNORE;IGNORE;<U000E0160> % VARIATION SELECTOR-113
+<U000E0161> IGNORE;IGNORE;IGNORE;<U000E0161> % VARIATION SELECTOR-114
+<U000E0162> IGNORE;IGNORE;IGNORE;<U000E0162> % VARIATION SELECTOR-115
+<U000E0163> IGNORE;IGNORE;IGNORE;<U000E0163> % VARIATION SELECTOR-116
+<U000E0164> IGNORE;IGNORE;IGNORE;<U000E0164> % VARIATION SELECTOR-117
+<U000E0165> IGNORE;IGNORE;IGNORE;<U000E0165> % VARIATION SELECTOR-118
+<U000E0166> IGNORE;IGNORE;IGNORE;<U000E0166> % VARIATION SELECTOR-119
+<U000E0167> IGNORE;IGNORE;IGNORE;<U000E0167> % VARIATION SELECTOR-120
+<U000E0168> IGNORE;IGNORE;IGNORE;<U000E0168> % VARIATION SELECTOR-121
+<U000E0169> IGNORE;IGNORE;IGNORE;<U000E0169> % VARIATION SELECTOR-122
+<U000E016A> IGNORE;IGNORE;IGNORE;<U000E016A> % VARIATION SELECTOR-123
+<U000E016B> IGNORE;IGNORE;IGNORE;<U000E016B> % VARIATION SELECTOR-124
+<U000E016C> IGNORE;IGNORE;IGNORE;<U000E016C> % VARIATION SELECTOR-125
+<U000E016D> IGNORE;IGNORE;IGNORE;<U000E016D> % VARIATION SELECTOR-126
+<U000E016E> IGNORE;IGNORE;IGNORE;<U000E016E> % VARIATION SELECTOR-127
+<U000E016F> IGNORE;IGNORE;IGNORE;<U000E016F> % VARIATION SELECTOR-128
+<U000E0170> IGNORE;IGNORE;IGNORE;<U000E0170> % VARIATION SELECTOR-129
+<U000E0171> IGNORE;IGNORE;IGNORE;<U000E0171> % VARIATION SELECTOR-130
+<U000E0172> IGNORE;IGNORE;IGNORE;<U000E0172> % VARIATION SELECTOR-131
+<U000E0173> IGNORE;IGNORE;IGNORE;<U000E0173> % VARIATION SELECTOR-132
+<U000E0174> IGNORE;IGNORE;IGNORE;<U000E0174> % VARIATION SELECTOR-133
+<U000E0175> IGNORE;IGNORE;IGNORE;<U000E0175> % VARIATION SELECTOR-134
+<U000E0176> IGNORE;IGNORE;IGNORE;<U000E0176> % VARIATION SELECTOR-135
+<U000E0177> IGNORE;IGNORE;IGNORE;<U000E0177> % VARIATION SELECTOR-136
+<U000E0178> IGNORE;IGNORE;IGNORE;<U000E0178> % VARIATION SELECTOR-137
+<U000E0179> IGNORE;IGNORE;IGNORE;<U000E0179> % VARIATION SELECTOR-138
+<U000E017A> IGNORE;IGNORE;IGNORE;<U000E017A> % VARIATION SELECTOR-139
+<U000E017B> IGNORE;IGNORE;IGNORE;<U000E017B> % VARIATION SELECTOR-140
+<U000E017C> IGNORE;IGNORE;IGNORE;<U000E017C> % VARIATION SELECTOR-141
+<U000E017D> IGNORE;IGNORE;IGNORE;<U000E017D> % VARIATION SELECTOR-142
+<U000E017E> IGNORE;IGNORE;IGNORE;<U000E017E> % VARIATION SELECTOR-143
+<U000E017F> IGNORE;IGNORE;IGNORE;<U000E017F> % VARIATION SELECTOR-144
+<U000E0180> IGNORE;IGNORE;IGNORE;<U000E0180> % VARIATION SELECTOR-145
+<U000E0181> IGNORE;IGNORE;IGNORE;<U000E0181> % VARIATION SELECTOR-146
+<U000E0182> IGNORE;IGNORE;IGNORE;<U000E0182> % VARIATION SELECTOR-147
+<U000E0183> IGNORE;IGNORE;IGNORE;<U000E0183> % VARIATION SELECTOR-148
+<U000E0184> IGNORE;IGNORE;IGNORE;<U000E0184> % VARIATION SELECTOR-149
+<U000E0185> IGNORE;IGNORE;IGNORE;<U000E0185> % VARIATION SELECTOR-150
+<U000E0186> IGNORE;IGNORE;IGNORE;<U000E0186> % VARIATION SELECTOR-151
+<U000E0187> IGNORE;IGNORE;IGNORE;<U000E0187> % VARIATION SELECTOR-152
+<U000E0188> IGNORE;IGNORE;IGNORE;<U000E0188> % VARIATION SELECTOR-153
+<U000E0189> IGNORE;IGNORE;IGNORE;<U000E0189> % VARIATION SELECTOR-154
+<U000E018A> IGNORE;IGNORE;IGNORE;<U000E018A> % VARIATION SELECTOR-155
+<U000E018B> IGNORE;IGNORE;IGNORE;<U000E018B> % VARIATION SELECTOR-156
+<U000E018C> IGNORE;IGNORE;IGNORE;<U000E018C> % VARIATION SELECTOR-157
+<U000E018D> IGNORE;IGNORE;IGNORE;<U000E018D> % VARIATION SELECTOR-158
+<U000E018E> IGNORE;IGNORE;IGNORE;<U000E018E> % VARIATION SELECTOR-159
+<U000E018F> IGNORE;IGNORE;IGNORE;<U000E018F> % VARIATION SELECTOR-160
+<U000E0190> IGNORE;IGNORE;IGNORE;<U000E0190> % VARIATION SELECTOR-161
+<U000E0191> IGNORE;IGNORE;IGNORE;<U000E0191> % VARIATION SELECTOR-162
+<U000E0192> IGNORE;IGNORE;IGNORE;<U000E0192> % VARIATION SELECTOR-163
+<U000E0193> IGNORE;IGNORE;IGNORE;<U000E0193> % VARIATION SELECTOR-164
+<U000E0194> IGNORE;IGNORE;IGNORE;<U000E0194> % VARIATION SELECTOR-165
+<U000E0195> IGNORE;IGNORE;IGNORE;<U000E0195> % VARIATION SELECTOR-166
+<U000E0196> IGNORE;IGNORE;IGNORE;<U000E0196> % VARIATION SELECTOR-167
+<U000E0197> IGNORE;IGNORE;IGNORE;<U000E0197> % VARIATION SELECTOR-168
+<U000E0198> IGNORE;IGNORE;IGNORE;<U000E0198> % VARIATION SELECTOR-169
+<U000E0199> IGNORE;IGNORE;IGNORE;<U000E0199> % VARIATION SELECTOR-170
+<U000E019A> IGNORE;IGNORE;IGNORE;<U000E019A> % VARIATION SELECTOR-171
+<U000E019B> IGNORE;IGNORE;IGNORE;<U000E019B> % VARIATION SELECTOR-172
+<U000E019C> IGNORE;IGNORE;IGNORE;<U000E019C> % VARIATION SELECTOR-173
+<U000E019D> IGNORE;IGNORE;IGNORE;<U000E019D> % VARIATION SELECTOR-174
+<U000E019E> IGNORE;IGNORE;IGNORE;<U000E019E> % VARIATION SELECTOR-175
+<U000E019F> IGNORE;IGNORE;IGNORE;<U000E019F> % VARIATION SELECTOR-176
+<U000E01A0> IGNORE;IGNORE;IGNORE;<U000E01A0> % VARIATION SELECTOR-177
+<U000E01A1> IGNORE;IGNORE;IGNORE;<U000E01A1> % VARIATION SELECTOR-178
+<U000E01A2> IGNORE;IGNORE;IGNORE;<U000E01A2> % VARIATION SELECTOR-179
+<U000E01A3> IGNORE;IGNORE;IGNORE;<U000E01A3> % VARIATION SELECTOR-180
+<U000E01A4> IGNORE;IGNORE;IGNORE;<U000E01A4> % VARIATION SELECTOR-181
+<U000E01A5> IGNORE;IGNORE;IGNORE;<U000E01A5> % VARIATION SELECTOR-182
+<U000E01A6> IGNORE;IGNORE;IGNORE;<U000E01A6> % VARIATION SELECTOR-183
+<U000E01A7> IGNORE;IGNORE;IGNORE;<U000E01A7> % VARIATION SELECTOR-184
+<U000E01A8> IGNORE;IGNORE;IGNORE;<U000E01A8> % VARIATION SELECTOR-185
+<U000E01A9> IGNORE;IGNORE;IGNORE;<U000E01A9> % VARIATION SELECTOR-186
+<U000E01AA> IGNORE;IGNORE;IGNORE;<U000E01AA> % VARIATION SELECTOR-187
+<U000E01AB> IGNORE;IGNORE;IGNORE;<U000E01AB> % VARIATION SELECTOR-188
+<U000E01AC> IGNORE;IGNORE;IGNORE;<U000E01AC> % VARIATION SELECTOR-189
+<U000E01AD> IGNORE;IGNORE;IGNORE;<U000E01AD> % VARIATION SELECTOR-190
+<U000E01AE> IGNORE;IGNORE;IGNORE;<U000E01AE> % VARIATION SELECTOR-191
+<U000E01AF> IGNORE;IGNORE;IGNORE;<U000E01AF> % VARIATION SELECTOR-192
+<U000E01B0> IGNORE;IGNORE;IGNORE;<U000E01B0> % VARIATION SELECTOR-193
+<U000E01B1> IGNORE;IGNORE;IGNORE;<U000E01B1> % VARIATION SELECTOR-194
+<U000E01B2> IGNORE;IGNORE;IGNORE;<U000E01B2> % VARIATION SELECTOR-195
+<U000E01B3> IGNORE;IGNORE;IGNORE;<U000E01B3> % VARIATION SELECTOR-196
+<U000E01B4> IGNORE;IGNORE;IGNORE;<U000E01B4> % VARIATION SELECTOR-197
+<U000E01B5> IGNORE;IGNORE;IGNORE;<U000E01B5> % VARIATION SELECTOR-198
+<U000E01B6> IGNORE;IGNORE;IGNORE;<U000E01B6> % VARIATION SELECTOR-199
+<U000E01B7> IGNORE;IGNORE;IGNORE;<U000E01B7> % VARIATION SELECTOR-200
+<U000E01B8> IGNORE;IGNORE;IGNORE;<U000E01B8> % VARIATION SELECTOR-201
+<U000E01B9> IGNORE;IGNORE;IGNORE;<U000E01B9> % VARIATION SELECTOR-202
+<U000E01BA> IGNORE;IGNORE;IGNORE;<U000E01BA> % VARIATION SELECTOR-203
+<U000E01BB> IGNORE;IGNORE;IGNORE;<U000E01BB> % VARIATION SELECTOR-204
+<U000E01BC> IGNORE;IGNORE;IGNORE;<U000E01BC> % VARIATION SELECTOR-205
+<U000E01BD> IGNORE;IGNORE;IGNORE;<U000E01BD> % VARIATION SELECTOR-206
+<U000E01BE> IGNORE;IGNORE;IGNORE;<U000E01BE> % VARIATION SELECTOR-207
+<U000E01BF> IGNORE;IGNORE;IGNORE;<U000E01BF> % VARIATION SELECTOR-208
+<U000E01C0> IGNORE;IGNORE;IGNORE;<U000E01C0> % VARIATION SELECTOR-209
+<U000E01C1> IGNORE;IGNORE;IGNORE;<U000E01C1> % VARIATION SELECTOR-210
+<U000E01C2> IGNORE;IGNORE;IGNORE;<U000E01C2> % VARIATION SELECTOR-211
+<U000E01C3> IGNORE;IGNORE;IGNORE;<U000E01C3> % VARIATION SELECTOR-212
+<U000E01C4> IGNORE;IGNORE;IGNORE;<U000E01C4> % VARIATION SELECTOR-213
+<U000E01C5> IGNORE;IGNORE;IGNORE;<U000E01C5> % VARIATION SELECTOR-214
+<U000E01C6> IGNORE;IGNORE;IGNORE;<U000E01C6> % VARIATION SELECTOR-215
+<U000E01C7> IGNORE;IGNORE;IGNORE;<U000E01C7> % VARIATION SELECTOR-216
+<U000E01C8> IGNORE;IGNORE;IGNORE;<U000E01C8> % VARIATION SELECTOR-217
+<U000E01C9> IGNORE;IGNORE;IGNORE;<U000E01C9> % VARIATION SELECTOR-218
+<U000E01CA> IGNORE;IGNORE;IGNORE;<U000E01CA> % VARIATION SELECTOR-219
+<U000E01CB> IGNORE;IGNORE;IGNORE;<U000E01CB> % VARIATION SELECTOR-220
+<U000E01CC> IGNORE;IGNORE;IGNORE;<U000E01CC> % VARIATION SELECTOR-221
+<U000E01CD> IGNORE;IGNORE;IGNORE;<U000E01CD> % VARIATION SELECTOR-222
+<U000E01CE> IGNORE;IGNORE;IGNORE;<U000E01CE> % VARIATION SELECTOR-223
+<U000E01CF> IGNORE;IGNORE;IGNORE;<U000E01CF> % VARIATION SELECTOR-224
+<U000E01D0> IGNORE;IGNORE;IGNORE;<U000E01D0> % VARIATION SELECTOR-225
+<U000E01D1> IGNORE;IGNORE;IGNORE;<U000E01D1> % VARIATION SELECTOR-226
+<U000E01D2> IGNORE;IGNORE;IGNORE;<U000E01D2> % VARIATION SELECTOR-227
+<U000E01D3> IGNORE;IGNORE;IGNORE;<U000E01D3> % VARIATION SELECTOR-228
+<U000E01D4> IGNORE;IGNORE;IGNORE;<U000E01D4> % VARIATION SELECTOR-229
+<U000E01D5> IGNORE;IGNORE;IGNORE;<U000E01D5> % VARIATION SELECTOR-230
+<U000E01D6> IGNORE;IGNORE;IGNORE;<U000E01D6> % VARIATION SELECTOR-231
+<U000E01D7> IGNORE;IGNORE;IGNORE;<U000E01D7> % VARIATION SELECTOR-232
+<U000E01D8> IGNORE;IGNORE;IGNORE;<U000E01D8> % VARIATION SELECTOR-233
+<U000E01D9> IGNORE;IGNORE;IGNORE;<U000E01D9> % VARIATION SELECTOR-234
+<U000E01DA> IGNORE;IGNORE;IGNORE;<U000E01DA> % VARIATION SELECTOR-235
+<U000E01DB> IGNORE;IGNORE;IGNORE;<U000E01DB> % VARIATION SELECTOR-236
+<U000E01DC> IGNORE;IGNORE;IGNORE;<U000E01DC> % VARIATION SELECTOR-237
+<U000E01DD> IGNORE;IGNORE;IGNORE;<U000E01DD> % VARIATION SELECTOR-238
+<U000E01DE> IGNORE;IGNORE;IGNORE;<U000E01DE> % VARIATION SELECTOR-239
+<U000E01DF> IGNORE;IGNORE;IGNORE;<U000E01DF> % VARIATION SELECTOR-240
+<U000E01E0> IGNORE;IGNORE;IGNORE;<U000E01E0> % VARIATION SELECTOR-241
+<U000E01E1> IGNORE;IGNORE;IGNORE;<U000E01E1> % VARIATION SELECTOR-242
+<U000E01E2> IGNORE;IGNORE;IGNORE;<U000E01E2> % VARIATION SELECTOR-243
+<U000E01E3> IGNORE;IGNORE;IGNORE;<U000E01E3> % VARIATION SELECTOR-244
+<U000E01E4> IGNORE;IGNORE;IGNORE;<U000E01E4> % VARIATION SELECTOR-245
+<U000E01E5> IGNORE;IGNORE;IGNORE;<U000E01E5> % VARIATION SELECTOR-246
+<U000E01E6> IGNORE;IGNORE;IGNORE;<U000E01E6> % VARIATION SELECTOR-247
+<U000E01E7> IGNORE;IGNORE;IGNORE;<U000E01E7> % VARIATION SELECTOR-248
+<U000E01E8> IGNORE;IGNORE;IGNORE;<U000E01E8> % VARIATION SELECTOR-249
+<U000E01E9> IGNORE;IGNORE;IGNORE;<U000E01E9> % VARIATION SELECTOR-250
+<U000E01EA> IGNORE;IGNORE;IGNORE;<U000E01EA> % VARIATION SELECTOR-251
+<U000E01EB> IGNORE;IGNORE;IGNORE;<U000E01EB> % VARIATION SELECTOR-252
+<U000E01EC> IGNORE;IGNORE;IGNORE;<U000E01EC> % VARIATION SELECTOR-253
+<U000E01ED> IGNORE;IGNORE;IGNORE;<U000E01ED> % VARIATION SELECTOR-254
+<U000E01EE> IGNORE;IGNORE;IGNORE;<U000E01EE> % VARIATION SELECTOR-255
+<U000E01EF> IGNORE;IGNORE;IGNORE;<U000E01EF> % VARIATION SELECTOR-256
<U0009> IGNORE;IGNORE;IGNORE;<U0009> % HORIZONTAL TABULATION (in ISO 6429)
<U000A> IGNORE;IGNORE;IGNORE;<U000A> % LINE FEED (in ISO 6429)
<U000B> IGNORE;IGNORE;IGNORE;<U000B> % VERTICAL TABULATION (in ISO 6429)

View File

@ -0,0 +1,244 @@
commit 1f4df3bb2ac69f2e1947c2953379a7f19b5f0c35
Author: Mike FABIAN <mfabian@redhat.com>
Date: Tue Jan 30 15:45:05 2018 +0100
Add sections for various scripts to the iso14651_t1_common file
* localedata/locales/iso14651_t1_common: Add sections for various
scripts to the iso14651_t1_common file.
diff --git a/localedata/locales/iso14651_t1_common b/localedata/locales/iso14651_t1_common
index 2d5fdfa87bb93fc8..a049c2fec526a1c7 100644
--- a/localedata/locales/iso14651_t1_common
+++ b/localedata/locales/iso14651_t1_common
@@ -18,6 +18,29 @@ LC_COLLATE
% Autogenerated Common Template Table
% created from unidata-9.0.0.txt
+% Declaration of scripts
+script <SPECIAL>
+script <LATIN>
+script <TIFINAGH>
+script <ARAB>
+script <HEBREU>
+script <GREC>
+script <CYRIL>
+script <ARMENIAN>
+script <GEORGIAN>
+script <DEVANAGARI>
+script <GUJARATI>
+script <TELUGU>
+script <GURUMUKHI>
+script <KANNADA>
+script <TAMIL>
+script <SINHALA>
+script <MALAYALAM>
+script <BENGALI>
+script <MYANMAR>
+script <TIBETAN>
+script <Ethi>
+
% Declaration of collating symbols
% Many symbols (such as <S0060>) are declared and assigned a weight
@@ -54801,15 +54824,7 @@ collating-element <UAABC_AAAF> from "<UAABC><UAAAF>" % collation-element for reo
<SFFFF> % Largest primary weight
-ifdef DIACRIT_BACKWARD
-order_start forward;backward;forward;forward,position
-else
-order_start forward;forward;forward;forward,position
-endif
-
-% Decomment the first order_start line to specify directions for each level.
-% To tailor for French accent handling, instead decomment the second
-% order_start statement.
+order_start <SPECIAL>;forward;backward;forward;forward,position
% Note: The following list of symbol_element's has been generated in
% sorted order, to assist in understanding the string ordering that
@@ -64305,6 +64320,12 @@ endif
<U33E8> "<S0039><RFB40><TE5E5>";"<BASE><BASE>";"<COMPAT><COMPAT>";<U33E8> % IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE
<U32C8> "<S0039><RFB40><TE708>";"<BASE><BASE>";"<COMPAT><COMPAT>";<U32C8> % IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER
<U3361> "<S0039><RFB40><TF0B9>";"<BASE><BASE>";"<COMPAT><COMPAT>";<U3361> % IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE
+order_end
+ifdef DIACRIT_BACKWARD
+order_start <LATIN>;forward;backward;forward;forward,position
+else
+order_start <LATIN>;forward;forward;forward;forward,position
+endif
<U0061> <S0061>;<BASE>;<MIN>;<U0061> % LATIN SMALL LETTER A
<UFF41> <S0061>;<BASE>;<WIDE>;<UFF41> % FULLWIDTH LATIN SMALL LETTER A
<U0363> <S0061>;<BASE>;<COMPAT>;<U0363> % COMBINING LATIN SMALL LETTER A
@@ -66739,6 +66760,8 @@ endif
<U0001D736> <S03B1>;<BASE>;<FONT>;<U0001D736> % MATHEMATICAL BOLD ITALIC SMALL ALPHA
<U0001D770> <S03B1>;<BASE>;<FONT>;<U0001D770> % MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA
<U0001D7AA> <S03B1>;<BASE>;<FONT>;<U0001D7AA> % MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA
+order_end
+order_start <GREC>;forward;forward;forward;forward,position
<U0391> <S03B1>;<BASE>;<CAP>;<U0391> % GREEK CAPITAL LETTER ALPHA
<U0001D6A8> <S03B1>;<BASE>;<FONTCAP>;<U0001D6A8> % MATHEMATICAL BOLD CAPITAL ALPHA
<U0001D6E2> <S03B1>;<BASE>;<FONTCAP>;<U0001D6E2> % MATHEMATICAL ITALIC CAPITAL ALPHA
@@ -67499,6 +67522,8 @@ endif
<U2CE0> <S2CE1>;<BASE>;<CAP>;<U2CE0> % COPTIC CAPITAL LETTER OLD NUBIAN NYI
<U2CE3> <S2CE3>;<BASE>;<MIN>;<U2CE3> % COPTIC SMALL LETTER OLD NUBIAN WAU
<U2CE2> <S2CE3>;<BASE>;<CAP>;<U2CE2> % COPTIC CAPITAL LETTER OLD NUBIAN WAU
+order_end
+order_start <CYRIL>;forward;forward;forward;forward,position
<U0430> <S0430>;<BASE>;<MIN>;<U0430> % CYRILLIC SMALL LETTER A
<U2DF6> <S0430>;<BASE>;<COMPAT>;<U2DF6> % COMBINING CYRILLIC LETTER A
<U0410> <S0430>;<BASE>;<CAP>;<U0410> % CYRILLIC CAPITAL LETTER A
@@ -68104,6 +68129,8 @@ endif
<U00010373> <S10373>;<BASE>;<MIN>;<U00010373> % OLD PERMIC LETTER YU
<U00010374> <S10374>;<BASE>;<MIN>;<U00010374> % OLD PERMIC LETTER YA
<U00010375> <S10375>;<BASE>;<MIN>;<U00010375> % OLD PERMIC LETTER IA
+order_end
+order_start <GEORGIAN>;forward;forward;forward;forward,position
<U10D0> <S10D0>;<BASE>;<MIN>;<U10D0> % GEORGIAN LETTER AN
<U2D00> <S2D00>;<BASE>;<MIN>;<U2D00> % GEORGIAN SMALL LETTER AN
<U10A0> <S2D00>;<BASE>;<CAP>;<U10A0> % GEORGIAN CAPITAL LETTER AN
@@ -68231,6 +68258,8 @@ endif
<U10CD> <S2D2D>;<BASE>;<CAP>;<U10CD> % GEORGIAN CAPITAL LETTER AEN
<U10FE> <S10FE>;<BASE>;<MIN>;<U10FE> % GEORGIAN LETTER HARD SIGN
<U10FF> <S10FF>;<BASE>;<MIN>;<U10FF> % GEORGIAN LETTER LABIAL SIGN
+order_end
+order_start <ARMENIAN>;forward;forward;forward;forward,position
<U0561> <S0561>;<BASE>;<MIN>;<U0561> % ARMENIAN SMALL LETTER AYB
<U0531> <S0561>;<BASE>;<CAP>;<U0531> % ARMENIAN CAPITAL LETTER AYB
<U0562> <S0562>;<BASE>;<MIN>;<U0562> % ARMENIAN SMALL LETTER BEN
@@ -68314,6 +68343,8 @@ endif
<U0586> <S0586>;<BASE>;<MIN>;<U0586> % ARMENIAN SMALL LETTER FEH
<U0556> <S0586>;<BASE>;<CAP>;<U0556> % ARMENIAN CAPITAL LETTER FEH
<U0559> <S0559>;<BASE>;<MIN>;<U0559> % ARMENIAN MODIFIER LETTER LEFT HALF RING
+order_end
+order_start <HEBREU>;forward;forward;forward;forward,position
<U05D0> <S05D0>;<BASE>;<MIN>;<U05D0> % HEBREW LETTER ALEF
<U2135> <S05D0>;<BASE>;<COMPAT>;<U2135> % ALEF SYMBOL
<UFB21> <S05D0>;<BASE>;<FONT>;<UFB21> % HEBREW LETTER WIDE ALEF
@@ -68440,6 +68471,8 @@ endif
<U0817> <S0817>;<BASE>;<MIN>;<U0817> % SAMARITAN MARK IN-ALAF
<U081A> <S081A>;<BASE>;<MIN>;<U081A> % SAMARITAN MODIFIER LETTER EPENTHETIC YUT
<U081B> <S081B>;<BASE>;<MIN>;<U081B> % SAMARITAN MARK EPENTHETIC YUT
+order_end
+order_start <ARAB>;forward;forward;forward;forward,position
<U0621> <S0621>;<BASE>;<MIN>;<U0621> % ARABIC LETTER HAMZA
<U0674> <S0621>;<BASE>;<COMPAT>;<U0674> % ARABIC LETTER HIGH HAMZA
<UFE80> <S0621>;<BASE>;<AISO>;<UFE80> % ARABIC LETTER HAMZA ISOLATED FORM
@@ -69669,6 +69702,8 @@ endif
<U07E7> <S07E7>;<BASE>;<MIN>;<U07E7> % NKO LETTER NYA WOLOSO
<U07F4> <S07F4>;<BASE>;<MIN>;<U07F4> % NKO HIGH TONE APOSTROPHE
<U07F5> <S07F5>;<BASE>;<MIN>;<U07F5> % NKO LOW TONE APOSTROPHE
+order_end
+order_start <TIFINAGH>;forward;forward;forward;forward,position
<U2D30> <S2D30>;<BASE>;<MIN>;<U2D30> % TIFINAGH LETTER YA
<U2D31> <S2D31>;<BASE>;<MIN>;<U2D31> % TIFINAGH LETTER YAB
<U2D32> <S2D32>;<BASE>;<MIN>;<U2D32> % TIFINAGH LETTER YABH
@@ -69726,6 +69761,8 @@ endif
<U2D64> <S2D64>;<BASE>;<MIN>;<U2D64> % TIFINAGH LETTER TAWELLEMET YAZ
<U2D65> <S2D65>;<BASE>;<MIN>;<U2D65> % TIFINAGH LETTER YAZZ
<U2D6F> <S2D6F>;<BASE>;<MIN>;<U2D6F> % TIFINAGH MODIFIER LETTER LABIALIZATION MARK
+order_end
+order_start <Ethi>;forward;forward;forward;forward,position
<U1200> <S1200>;<BASE>;<MIN>;<U1200> % ETHIOPIC SYLLABLE HA
<U1201> <S1201>;<BASE>;<MIN>;<U1201> % ETHIOPIC SYLLABLE HU
<U1202> <S1202>;<BASE>;<MIN>;<U1202> % ETHIOPIC SYLLABLE HI
@@ -70179,6 +70216,8 @@ endif
<U2DDC> <S2DDC>;<BASE>;<MIN>;<U2DDC> % ETHIOPIC SYLLABLE GYEE
<U2DDD> <S2DDD>;<BASE>;<MIN>;<U2DDD> % ETHIOPIC SYLLABLE GYE
<U2DDE> <S2DDE>;<BASE>;<MIN>;<U2DDE> % ETHIOPIC SYLLABLE GYO
+order_end
+order_start <DEVANAGARI>;forward;forward;forward;forward,position
<U0950> <S0950>;<BASE>;<MIN>;<U0950> % DEVANAGARI OM
<UA8FD> <SA8FD>;<BASE>;<MIN>;<UA8FD> % DEVANAGARI JAIN OM
<U0972> <S0972>;<BASE>;<MIN>;<U0972> % DEVANAGARI LETTER CANDRA A
@@ -70302,6 +70341,8 @@ endif
<U094B> <S094B>;<BASE>;<MIN>;<U094B> % DEVANAGARI VOWEL SIGN O
<U094C> <S094C>;<BASE>;<MIN>;<U094C> % DEVANAGARI VOWEL SIGN AU
<U094D> <S094D>;<BASE>;<MIN>;<U094D> % DEVANAGARI SIGN VIRAMA
+order_end
+order_start <BENGALI>;forward;forward;forward;forward,position
<U0980> <S0980>;<BASE>;<MIN>;<U0980> % BENGALI ANJI
<U0985> <S0985>;<BASE>;<MIN>;<U0985> % BENGALI LETTER A
<U0986> <S0986>;<BASE>;<MIN>;<U0986> % BENGALI LETTER AA
@@ -70373,6 +70414,8 @@ endif
<U09C7_09D7> <S09CC>;<BASE>;<MIN>;<U09CC> % BENGALI VOWEL SIGN AU
<U09CD> <S09CD>;<BASE>;<MIN>;<U09CD> % BENGALI SIGN VIRAMA
<U09D7> <S09D7>;<BASE>;<MIN>;<U09D7> % BENGALI AU LENGTH MARK
+order_end
+order_start <GURUMUKHI>;forward;forward;forward;forward,position
<U0A74> <S0A74>;<BASE>;<MIN>;<U0A74> % GURMUKHI EK ONKAR
<U0A73> <S0A73>;<BASE>;<MIN>;<U0A73> % GURMUKHI URA
<U0A09> <S0A09>;<BASE>;<MIN>;<U0A09> % GURMUKHI LETTER U
@@ -70436,6 +70479,8 @@ endif
<U0A4B> <S0A4B>;<BASE>;<MIN>;<U0A4B> % GURMUKHI VOWEL SIGN OO
<U0A4C> <S0A4C>;<BASE>;<MIN>;<U0A4C> % GURMUKHI VOWEL SIGN AU
<U0A4D> <S0A4D>;<BASE>;<MIN>;<U0A4D> % GURMUKHI SIGN VIRAMA
+order_end
+order_start <GUJARATI>;forward;forward;forward;forward,position
<U0AD0> <S0AD0>;<BASE>;<MIN>;<U0AD0> % GUJARATI OM
<U0A85> <S0A85>;<BASE>;<MIN>;<U0A85> % GUJARATI LETTER A
<U0A86> <S0A86>;<BASE>;<MIN>;<U0A86> % GUJARATI LETTER AA
@@ -70577,6 +70622,8 @@ endif
<U0B4D> <S0B4D>;<BASE>;<MIN>;<U0B4D> % ORIYA SIGN VIRAMA
<U0B56> <S0B56>;<BASE>;<MIN>;<U0B56> % ORIYA AI LENGTH MARK
<U0B57> <S0B57>;<BASE>;<MIN>;<U0B57> % ORIYA AU LENGTH MARK
+order_end
+order_start <TAMIL>;forward;forward;forward;forward,position
<U0BD0> <S0BD0>;<BASE>;<MIN>;<U0BD0> % TAMIL OM
<U0B85> <S0B85>;<BASE>;<MIN>;<U0B85> % TAMIL LETTER A
<U0B86> <S0B86>;<BASE>;<MIN>;<U0B86> % TAMIL LETTER AA
@@ -70631,6 +70678,8 @@ endif
<U0BC6_0BD7> <S0BCC>;<BASE>;<MIN>;<U0BCC> % TAMIL VOWEL SIGN AU
<U0BCD> <S0BCD>;<BASE>;<MIN>;<U0BCD> % TAMIL SIGN VIRAMA
<U0BD7> <S0BD7>;<BASE>;<MIN>;<U0BD7> % TAMIL AU LENGTH MARK
+order_end
+order_start <TELUGU>;forward;forward;forward;forward,position
<U0C05> <S0C05>;<BASE>;<MIN>;<U0C05> % TELUGU LETTER A
<U0C06> <S0C06>;<BASE>;<MIN>;<U0C06> % TELUGU LETTER AA
<U0C07> <S0C07>;<BASE>;<MIN>;<U0C07> % TELUGU LETTER I
@@ -70706,6 +70755,8 @@ endif
<U0C4D> <S0C4D>;<BASE>;<MIN>;<U0C4D> % TELUGU SIGN VIRAMA
<U0C55> <S0C55>;<BASE>;<MIN>;<U0C55> % TELUGU LENGTH MARK
<U0C56> <S0C56>;<BASE>;<MIN>;<U0C56> % TELUGU AI LENGTH MARK
+order_end
+order_start <KANNADA>;forward;forward;forward;forward,position
<U0C85> <S0C85>;<BASE>;<MIN>;<U0C85> % KANNADA LETTER A
<U0C86> <S0C86>;<BASE>;<MIN>;<U0C86> % KANNADA LETTER AA
<U0C87> <S0C87>;<BASE>;<MIN>;<U0C87> % KANNADA LETTER I
@@ -70786,6 +70837,8 @@ endif
<U0CCD> <S0CCD>;<BASE>;<MIN>;<U0CCD> % KANNADA SIGN VIRAMA
<U0CD5> <S0CD5>;<BASE>;<MIN>;<U0CD5> % KANNADA LENGTH MARK
<U0CD6> <S0CD6>;<BASE>;<MIN>;<U0CD6> % KANNADA AI LENGTH MARK
+order_end
+order_start <MALAYALAM>;forward;forward;forward;forward,position
<U0D05> <S0D05>;<BASE>;<MIN>;<U0D05> % MALAYALAM LETTER A
<U0D06> <S0D06>;<BASE>;<MIN>;<U0D06> % MALAYALAM LETTER AA
<U0D07> <S0D07>;<BASE>;<MIN>;<U0D07> % MALAYALAM LETTER I
@@ -70872,6 +70925,8 @@ endif
<U0D46_0D57> <S0D4C>;<BASE>;<MIN>;<U0D4C> % MALAYALAM VOWEL SIGN AU
<U0D57> <S0D57>;<BASE>;<MIN>;<U0D57> % MALAYALAM AU LENGTH MARK
<U0D4D> <S0D4D>;<BASE>;<MIN>;<U0D4D> % MALAYALAM SIGN VIRAMA
+order_end
+order_start <SINHALA>;forward;forward;forward;forward,position
<U0D85> <S0D85>;<BASE>;<MIN>;<U0D85> % SINHALA LETTER AYANNA
<U0D86> <S0D86>;<BASE>;<MIN>;<U0D86> % SINHALA LETTER AAYANNA
<U0D87> <S0D87>;<BASE>;<MIN>;<U0D87> % SINHALA LETTER AEYANNA
@@ -72893,6 +72948,8 @@ endif
<UAAC2> <SAAC2>;<BASE>;<MIN>;<UAAC2> % TAI VIET TONE MAI SONG
<UAADB> <SAADB>;<BASE>;<MIN>;<UAADB> % TAI VIET SYMBOL KON
<UAADC> <SAADC>;<BASE>;<MIN>;<UAADC> % TAI VIET SYMBOL NUENG
+order_end
+order_start <TIBETAN>;forward;forward;forward;forward,position
<U0F40> <S0F40>;<BASE>;<MIN>;<U0F40> % TIBETAN LETTER KA
<U0F69> "<S0F40><S0FB5>";"<BASE><BASE>";"<MIN><MIN>";<U0F69> % TIBETAN LETTER KSSA
<U0F90> <S0F90>;<BASE>;<MIN>;<U0F90> % TIBETAN SUBJOINED LETTER KA
@@ -73468,6 +73525,8 @@ endif
<UA928> <SA928>;<BASE>;<MIN>;<UA928> % KAYAH LI VOWEL U
<UA929> <SA929>;<BASE>;<MIN>;<UA929> % KAYAH LI VOWEL EE
<UA92A> <SA92A>;<BASE>;<MIN>;<UA92A> % KAYAH LI VOWEL O
+order_end
+order_start <MYANMAR>;forward;forward;forward;forward,position
<U1000> <S1000>;<BASE>;<MIN>;<U1000> % MYANMAR LETTER KA
<U1075> <S1075>;<BASE>;<MIN>;<U1075> % MYANMAR LETTER SHAN KA
<U1001> <S1001>;<BASE>;<MIN>;<U1001> % MYANMAR LETTER KHA

View File

@ -0,0 +1,54 @@
commit 059454de60bdb1be9979ee09596c1e9a7e9e6c8b
Author: Mike FABIAN <mfabian@redhat.com>
Date: Tue Dec 12 14:39:34 2017 +0100
Collation order of ȥ has changed in new iso14651_t1_common file, adapt test files
* localedata/cs_CZ.UTF-8.in: adapt this test file to the collation
order of ȥ in the new iso14651_t1_common file.
* localedata/pl_PL.UTF-8.in: Likewise.
diff --git a/localedata/cs_CZ.UTF-8.in b/localedata/cs_CZ.UTF-8.in
index 71d19a76fa2c1a71..b0dcf842053536ad 100644
--- a/localedata/cs_CZ.UTF-8.in
+++ b/localedata/cs_CZ.UTF-8.in
@@ -184,8 +184,6 @@ z
Z
ź
Ź
za
Za
źa
@@ -198,6 +196,8 @@ Zbyněk
zeleň
ZZ
Z-2
ž
Ž
Ž
diff --git a/localedata/pl_PL.UTF-8.in b/localedata/pl_PL.UTF-8.in
index 5f7e9b7d6009e72d..1b4f3ef3c1233a20 100644
--- a/localedata/pl_PL.UTF-8.in
+++ b/localedata/pl_PL.UTF-8.in
@@ -132,8 +132,6 @@ z
Z
ž
Ž
za
Za
ža
@@ -142,6 +140,8 @@ zb
Zb
žb
Žb
ź
Ź
źa

View File

@ -1,416 +0,0 @@
Background information:
https://sourceware.org/ml/libc-alpha/2017-08/msg01257.html
https://fedoraproject.org/wiki/Changes/Replace_glibc_libcrypt_with_libxcrypt
From: Zack Weinberg <zackw@panix.com>
Subject: [PATCH] Deprecate libcrypt and don't build it by default
Back in June, Björn Esser proposed to add OpenBSD-compatible bcrypt
support to our implementation of crypt(3), and Zack Weinberg replied
that it might actually make more sense to _remove_ libcrypt from
glibc, freeing up libcrypt.so.1 and crypt.h to be provided by a
separate project that could move faster. (For instance, libxcrypt:
https://github.com/besser82/libxcrypt)
This patch disables build and installation of libcrypt by default. It
can be re-enabled with --enable-obsolete-crypt to configure. Unlike
libnsl, we do *not* install a runtime shared library; that's left to
the replacement. (Unlike the SunRPC situation, I think we can
probably drop this code altogether in a release or two.)
The function prototypes for crypt and encrypt are removed from
unistd.h, and the function prototype for setkey is removed from
stdlib.h; they do *not* come back with --enable-obsolete-crypt. This
means glibc no longer provides the POSIX CRYPT option, and the macro
_XOPEN_CRYPT is also removed from unistd.h to indicate that.
(_SC_XOPEN_CRYPT is still defined, but sysconf(_SC_XOPEN_CRYPT) will
return -1 at runtime.) These functions are also unconditionally
removed from conform/data/{stdlib,unistd}.h-data.
* posix/unistd.h (_XOPEN_CRYPT, crypt, encrypt): Don't declare.
* stdlib/stdlib.h (setkey): Don't declare.
* configure.ac (--enable-obsolete-crypt): New configure option.
* configure: Regenerate.
* config.make.in (build-obsolete-crypt): New makefile variable.
* crypt/Banner: Delete file.
* crypt/Makefile: Don't build anything unless
$(build-obsolete-crypt) is 'yes'.
* sysdeps/sparc/sparc32/sparcv9/multiarch/Makefile: Only add things
to libcrypt-sysdep_routines when $(build-obsolete-crypt) is 'yes'.
* sysdeps/sparc/sparc64/multiarch/Makefile: Likewise.
* sysdeps/unix/sysv/linux/arm/Makefile: Likewise.
* conform/Makefile: Only include libcrypt.a in linknamespace tests
when $(build-obsolete-crypt) is 'yes'.
* conform/data/stdlib.h-data (setkey): Don't expect.
* conform/data/unistd.h-data (crypt, encrypt): Don't expect.
* elf/Makefile: Only perform various tests of libcrypt.so/libcrypt.a
when $(build-obsolete-crypt) is 'yes'.
* elf/tst-linkall-static.c: Don't include crypt.h when USE_CRYPT
is false.
---
NEWS | 18 ++++++++++++++++++
config.make.in | 1 +
configure | 13 +++++++++++++
configure.ac | 8 ++++++++
conform/Makefile | 14 ++++++++++----
conform/data/stdlib.h-data | 3 ---
conform/data/unistd.h-data | 6 ------
crypt/Makefile | 5 +++++
elf/Makefile | 16 ++++++++++++----
elf/tst-linkall-static.c | 2 ++
posix/unistd.h | 16 ----------------
stdlib/stdlib.h | 6 ------
sysdeps/sparc/sparc32/sparcv9/multiarch/Makefile | 2 ++
sysdeps/sparc/sparc64/multiarch/Makefile | 2 ++
sysdeps/unix/sysv/linux/arm/Makefile | 2 ++
15 files changed, 75 insertions(+), 39 deletions(-)
diff --git a/config.make.in b/config.make.in
index 9e5e24b2c6..8fe610d04d 100644
--- a/config.make.in
+++ b/config.make.in
@@ -82,6 +82,7 @@ mach-interface-list = @mach_interface_list@
experimental-malloc = @experimental_malloc@
+build-obsolete-crypt = @build_obsolete_crypt@
nss-crypt = @libc_cv_nss_crypt@
static-nss-crypt = @libc_cv_static_nss_crypt@
diff --git a/configure b/configure
index 7a8bd3f817..46f6bd7f86 100755
--- a/configure
+++ b/configure
@@ -672,6 +672,7 @@ base_machine
have_tunables
build_pt_chown
build_nscd
+build_obsolete_crypt
build_obsolete_nsl
link_obsolete_rpc
libc_cv_static_nss_crypt
@@ -782,6 +783,7 @@ enable_experimental_malloc
enable_nss_crypt
enable_obsolete_rpc
enable_obsolete_nsl
+enable_obsolete_crypt
enable_systemtap
enable_build_nscd
enable_nscd
@@ -1453,6 +1455,7 @@ Optional Features:
link-time usage
--enable-obsolete-nsl build and install the obsolete libnsl library and
depending NSS modules
+ --enable-obsolete-crypt build and install the obsolete libcrypt library
--enable-systemtap enable systemtap static probe points [default=no]
--disable-build-nscd disable building and installing the nscd daemon
--disable-nscd library functions will not contact the nscd daemon
@@ -3632,6 +3635,16 @@ if test "$build_obsolete_nsl" = yes; then
fi
+# Check whether --enable-obsolete-crypt was given.
+if test "${enable_obsolete_crypt+set}" = set; then :
+ enableval=$enable_obsolete_crypt; build_obsolete_crypt=$enableval
+else
+ build_obsolete_crypt=no
+fi
+
+
+
+
# Check whether --enable-systemtap was given.
if test "${enable_systemtap+set}" = set; then :
enableval=$enable_systemtap; systemtap=$enableval
diff --git a/configure.ac b/configure.ac
index ca1282a6b3..0142353740 100644
--- a/configure.ac
+++ b/configure.ac
@@ -378,6 +378,14 @@ if test "$build_obsolete_nsl" = yes; then
AC_DEFINE(LINK_OBSOLETE_NSL)
fi
+AC_ARG_ENABLE([obsolete-crypt],
+ AC_HELP_STRING([--enable-obsolete-crypt],
+ [build and install the obsolete libcrypt library]),
+ [build_obsolete_crypt=$enableval],
+ [build_obsolete_crypt=no])
+AC_SUBST(build_obsolete_crypt)
+
+
AC_ARG_ENABLE([systemtap],
[AS_HELP_STRING([--enable-systemtap],
[enable systemtap static probe points @<:@default=no@:>@])],
diff --git a/conform/Makefile b/conform/Makefile
index 864fdeca21..5ef474fb24 100644
--- a/conform/Makefile
+++ b/conform/Makefile
@@ -193,22 +193,28 @@ linknamespace-libs-thr = $(linknamespace-libs-isoc) \
$(common-objpfx)rt/librt.a $(static-thread-library)
linknamespace-libs-posix = $(linknamespace-libs-thr) \
$(common-objpfx)dlfcn/libdl.a
-linknamespace-libs-xsi = $(linknamespace-libs-posix) \
- $(common-objpfx)crypt/libcrypt.a
+linknamespace-libs-xsi = $(linknamespace-libs-posix)
linknamespace-libs-ISO = $(linknamespace-libs-isoc)
linknamespace-libs-ISO99 = $(linknamespace-libs-isoc)
linknamespace-libs-ISO11 = $(linknamespace-libs-isoc)
-linknamespace-libs-XPG4 = $(linknamespace-libs-isoc) \
- $(common-objpfx)crypt/libcrypt.a
+linknamespace-libs-XPG4 = $(linknamespace-libs-isoc)
linknamespace-libs-XPG42 = $(linknamespace-libs-XPG4)
linknamespace-libs-POSIX = $(linknamespace-libs-thr)
linknamespace-libs-UNIX98 = $(linknamespace-libs-xsi)
linknamespace-libs-XOPEN2K = $(linknamespace-libs-xsi)
linknamespace-libs-POSIX2008 = $(linknamespace-libs-posix)
linknamespace-libs-XOPEN2K8 = $(linknamespace-libs-xsi)
+
+ifeq ($(build-obsolete-crypt),yes)
+linknamespace-libs-xsi += $(common-objpfx)crypt/libcrypt.a
+linknamespace-libs-XPG4 += $(common-objpfx)crypt/libcrypt.a
+endif
+
linknamespace-libs = $(foreach std,$(conformtest-standards),\
$(linknamespace-libs-$(std)))
+
+
$(linknamespace-symlist-stdlibs-tests): $(objpfx)symlist-stdlibs-%: \
$(linknamespace-libs)
LC_ALL=C $(READELF) -W -s $(linknamespace-libs-$*) > $@; \
diff --git a/conform/data/stdlib.h-data b/conform/data/stdlib.h-data
index d8fcccc2fb..6913828196 100644
--- a/conform/data/stdlib.h-data
+++ b/conform/data/stdlib.h-data
@@ -149,9 +149,6 @@ function {unsigned short int*} seed48 (unsigned short int[3])
#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX && !defined XPG4 && !defined XPG42 && !defined UNIX98
function int setenv (const char*, const char*, int)
#endif
-#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX && !defined POSIX2008
-function void setkey (const char*)
-#endif
#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined XPG4 && !defined POSIX && !defined POSIX2008
function {char*} setstate (char*)
#endif
diff --git a/conform/data/unistd.h-data b/conform/data/unistd.h-data
index ddf4f25132..aa070528e8 100644
--- a/conform/data/unistd.h-data
+++ b/conform/data/unistd.h-data
@@ -437,9 +437,6 @@ function int chroot (const char*)
function int chown (const char*, uid_t, gid_t)
function int close (int)
function size_t confstr (int, char*, size_t)
-#if !defined POSIX && !defined POSIX2008
-function {char*} crypt (const char*, const char*)
-#endif
#if defined XPG4 || defined XPG42 || defined UNIX98
function {char*} ctermid (char*)
function {char*} cuserid (char*)
@@ -449,9 +446,6 @@ allow cuserid
#endif
function int dup (int)
function int dup2 (int, int)
-#if !defined POSIX && !defined POSIX2008
-function void encrypt (char[64], int)
-#endif
function int execl (const char*, const char*, ...)
function int execle (const char*, const char*, ...)
function int execlp (const char*, const char*, ...)
diff --git a/crypt/Makefile b/crypt/Makefile
index 303800df73..024ec2c6ab 100644
--- a/crypt/Makefile
+++ b/crypt/Makefile
@@ -22,6 +22,8 @@ subdir := crypt
include ../Makeconfig
+ifeq ($(build-obsolete-crypt),yes)
+
headers := crypt.h
extra-libs := libcrypt
@@ -52,9 +54,11 @@ tests += md5test sha256test sha512test
# machine over a minute.
xtests = md5test-giant
endif
+endif
include ../Rules
+ifeq ($(build-obsolete-crypt),yes)
ifneq ($(nss-crypt),yes)
md5-routines := md5 $(filter md5%,$(libcrypt-sysdep_routines))
sha256-routines := sha256 $(filter sha256%,$(libcrypt-sysdep_routines))
@@ -71,3 +75,4 @@ $(addprefix $(objpfx),$(tests)): $(objpfx)libcrypt.so
else
$(addprefix $(objpfx),$(tests)): $(objpfx)libcrypt.a
endif
+endif
diff --git a/elf/Makefile b/elf/Makefile
index 2a432d8bee..366f7b80ec 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -385,15 +385,19 @@ $(objpfx)tst-_dl_addr_inside_object: $(objpfx)dl-addr-obj.os
CFLAGS-tst-_dl_addr_inside_object.c += $(PIE-ccflag)
endif
-# By default tst-linkall-static should try to use crypt routines to test
-# static libcrypt use.
-CFLAGS-tst-linkall-static.c += -DUSE_CRYPT=1
+ifeq ($(build-obsolete-crypt),yes)
+# If the libcrypt library is being built, tst-linkall-static should
+# try to use crypt routines to test static libcrypt use.
+CFLAGS-tst-linkall-static.c = -DUSE_CRYPT=1
# However, if we are using NSS crypto and we don't have a static
# library, then we exclude the use of crypt functions in the test.
# We similarly exclude libcrypt.a from the static link (see below).
ifeq (yesno,$(nss-crypt)$(static-nss-crypt))
CFLAGS-tst-linkall-static.c += -UUSE_CRYPT -DUSE_CRYPT=0
endif
+else
+CFLAGS-tst-linkall-static.c = -DUSE_CRYPT=0
+endif
include ../Rules
@@ -1113,8 +1117,10 @@ localplt-built-dso := $(addprefix $(common-objpfx),\
rt/librt.so \
dlfcn/libdl.so \
resolv/libresolv.so \
- crypt/libcrypt.so \
)
+ifeq ($(build-obsolete-crypt),yes)
+localplt-built-dso += $(addprefix $(common-objpfx), crypt/libcrypt.so)
+endif
ifeq ($(build-mathvec),yes)
localplt-built-dso += $(addprefix $(common-objpfx), mathvec/libmvec.so)
endif
@@ -1395,6 +1401,7 @@ $(objpfx)tst-linkall-static: \
$(common-objpfx)resolv/libanl.a \
$(static-thread-library)
+ifeq ($(build-obsolete-crypt),yes)
# If we are using NSS crypto and we have the ability to link statically
# then we include libcrypt.a, otherwise we leave out libcrypt.a and
# link as much as we can into the tst-linkall-static test. This assumes
@@ -1410,6 +1417,7 @@ ifeq (no,$(nss-crypt))
$(objpfx)tst-linkall-static: \
$(common-objpfx)crypt/libcrypt.a
endif
+endif
# The application depends on the DSO, and the DSO loads the plugin.
# The plugin also depends on the DSO. This creates the circular
diff --git a/elf/tst-linkall-static.c b/elf/tst-linkall-static.c
index e8df38f74e..0ffae7c723 100644
--- a/elf/tst-linkall-static.c
+++ b/elf/tst-linkall-static.c
@@ -18,7 +18,9 @@
#include <math.h>
#include <pthread.h>
+#if USE_CRYPT
#include <crypt.h>
+#endif
#include <resolv.h>
#include <dlfcn.h>
#include <utmp.h>
diff --git a/posix/unistd.h b/posix/unistd.h
index 4d149f9945..e75ce4d4ec 100644
--- a/posix/unistd.h
+++ b/posix/unistd.h
@@ -107,9 +107,6 @@ __BEGIN_DECLS
/* The X/Open Unix extensions are available. */
#define _XOPEN_UNIX 1
-/* Encryption is present. */
-#define _XOPEN_CRYPT 1
-
/* The enhanced internationalization capabilities according to XPG4.2
are present. */
#define _XOPEN_ENH_I18N 1
@@ -1118,20 +1115,7 @@ ssize_t copy_file_range (int __infd, __off64_t *__pinoff,
extern int fdatasync (int __fildes);
#endif /* Use POSIX199309 */
-
-/* XPG4.2 specifies that prototypes for the encryption functions must
- be defined here. */
#ifdef __USE_XOPEN
-/* Encrypt at most 8 characters from KEY using salt to perturb DES. */
-extern char *crypt (const char *__key, const char *__salt)
- __THROW __nonnull ((1, 2));
-
-/* Encrypt data in BLOCK in place if EDFLAG is zero; otherwise decrypt
- block in place. */
-extern void encrypt (char *__glibc_block, int __edflag)
- __THROW __nonnull ((1));
-
-
/* Swab pairs bytes in the first N bytes of the area pointed to by
FROM and copy the result to TO. The value of TO must not be in the
range [FROM - N + 1, FROM - 1]. If N is odd the first byte in FROM
diff --git a/stdlib/stdlib.h b/stdlib/stdlib.h
index 6b1ead31e0..8e23e93557 100644
--- a/stdlib/stdlib.h
+++ b/stdlib/stdlib.h
@@ -958,12 +958,6 @@ extern int getsubopt (char **__restrict __optionp,
#endif
-#ifdef __USE_XOPEN
-/* Setup DES tables according KEY. */
-extern void setkey (const char *__key) __THROW __nonnull ((1));
-#endif
-
-
/* X/Open pseudo terminal handling. */
#ifdef __USE_XOPEN2KXSI
diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/Makefile b/sysdeps/sparc/sparc32/sparcv9/multiarch/Makefile
index a6d08f3a00..d8b8297fb0 100644
--- a/sysdeps/sparc/sparc32/sparcv9/multiarch/Makefile
+++ b/sysdeps/sparc/sparc32/sparcv9/multiarch/Makefile
@@ -1,6 +1,8 @@
ifeq ($(subdir),crypt)
+ifeq ($(build-obsolete-crypt),yes)
libcrypt-sysdep_routines += md5-crop sha256-crop sha512-crop
endif
+endif
ifeq ($(subdir),locale)
localedef-aux += md5-crop
diff --git a/sysdeps/sparc/sparc64/multiarch/Makefile b/sysdeps/sparc/sparc64/multiarch/Makefile
index eaf758e7aa..0198f9886f 100644
--- a/sysdeps/sparc/sparc64/multiarch/Makefile
+++ b/sysdeps/sparc/sparc64/multiarch/Makefile
@@ -1,6 +1,8 @@
ifeq ($(subdir),crypt)
+ifeq ($(build-obsolete-crypt),yes)
libcrypt-sysdep_routines += md5-crop sha256-crop sha512-crop
endif
+endif
ifeq ($(subdir),locale)
localedef-aux += md5-crop
diff --git a/sysdeps/unix/sysv/linux/arm/Makefile b/sysdeps/unix/sysv/linux/arm/Makefile
index 4adc35de04..6cab4f3a31 100644
--- a/sysdeps/unix/sysv/linux/arm/Makefile
+++ b/sysdeps/unix/sysv/linux/arm/Makefile
@@ -19,8 +19,10 @@ endif
# Add a syscall function to each library that needs one.
ifeq ($(subdir),crypt)
+ifeq ($(build-obsolete-crypt),yes)
libcrypt-sysdep_routines += libc-do-syscall
endif
+endif
ifeq ($(subdir),rt)
librt-sysdep_routines += libc-do-syscall
--
2.16.0

View File

@ -0,0 +1,18 @@
Introduce a dummy version GLIBC_2.28, so that the compat symbol checks
give the right result for the glibc 2.27 backport (i.e., the symbols are
still built into 2.27 libraries).
This is not needed upstream because of the 2.28 version number there.
diff --git a/crypt/Versions b/crypt/Versions
index 389e7d544aff1e2e..59259c6a397d915e 100644
--- a/crypt/Versions
+++ b/crypt/Versions
@@ -2,4 +2,7 @@ libcrypt {
GLIBC_2.0 {
crypt; crypt_r; encrypt; encrypt_r; fcrypt; setkey; setkey_r;
}
+ GLIBC_2.28 {
+ # Dummy entry to make conditionals for compat symbols work.
+ }
}

718
glibc-disable-crypt-1.patch Normal file
View File

@ -0,0 +1,718 @@
commit b10a0accee709a5efff2fadf0b0bbb79ff0ad759
Author: Zack Weinberg <zackw@panix.com>
Date: Fri Jun 29 16:53:18 2018 +0200
Disallow use of DES encryption functions in new programs.
The functions encrypt, setkey, encrypt_r, setkey_r, cbc_crypt,
ecb_crypt, and des_setparity should not be used in new programs,
because they use the DES block cipher, which is unacceptably weak by
modern standards. Demote all of them to compatibility symbols, and
remove their prototypes from installed headers. cbc_crypt, ecb_crypt,
and des_setparity were already compat symbols when glibc was
configured with --disable-obsolete-rpc.
POSIX requires encrypt and setkey to be available when _XOPEN_CRYPT
is defined, so this change also removes the definition of X_OPEN_CRYPT
from <unistd.h>.
The entire "DES Encryption" section is dropped from the manual, as is
the mention of AUTH_DES and FIPS 140-2 in the introduction to
crypt.texi. The documentation of 'memfrob' cross-referenced the DES
Encryption section, which is replaced by a hyperlink to libgcrypt, and
while I was in there I spruced up the actual documentation of
'memfrob' and 'strfry' a little. It's still fairly jokey, because
those functions _are_ jokes, but they do also have real use cases, so
people trying to use them for real should have all the information
they need.
DES-based authentication for Sun RPC is also insecure and should be
deprecated or even removed, but maybe that can be left as TI-RPC's
problem.
diff --git a/conform/data/stdlib.h-data b/conform/data/stdlib.h-data
index d8fcccc2fbabb0b2..6913828196faf89d 100644
--- a/conform/data/stdlib.h-data
+++ b/conform/data/stdlib.h-data
@@ -149,9 +149,6 @@ function {unsigned short int*} seed48 (unsigned short int[3])
#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX && !defined XPG4 && !defined XPG42 && !defined UNIX98
function int setenv (const char*, const char*, int)
#endif
-#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX && !defined POSIX2008
-function void setkey (const char*)
-#endif
#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined XPG4 && !defined POSIX && !defined POSIX2008
function {char*} setstate (char*)
#endif
diff --git a/conform/data/unistd.h-data b/conform/data/unistd.h-data
index ddf4f251326b66bf..aa070528e8303f6c 100644
--- a/conform/data/unistd.h-data
+++ b/conform/data/unistd.h-data
@@ -437,9 +437,6 @@ function int chroot (const char*)
function int chown (const char*, uid_t, gid_t)
function int close (int)
function size_t confstr (int, char*, size_t)
-#if !defined POSIX && !defined POSIX2008
-function {char*} crypt (const char*, const char*)
-#endif
#if defined XPG4 || defined XPG42 || defined UNIX98
function {char*} ctermid (char*)
function {char*} cuserid (char*)
@@ -449,9 +446,6 @@ allow cuserid
#endif
function int dup (int)
function int dup2 (int, int)
-#if !defined POSIX && !defined POSIX2008
-function void encrypt (char[64], int)
-#endif
function int execl (const char*, const char*, ...)
function int execle (const char*, const char*, ...)
function int execlp (const char*, const char*, ...)
diff --git a/crypt/cert.c b/crypt/cert.c
index 80029e9078c1cdc0..e070ca398d97911d 100644
--- a/crypt/cert.c
+++ b/crypt/cert.c
@@ -10,6 +10,22 @@
#include <stdlib.h>
#include "crypt.h"
+/* This file tests the deprecated setkey/encrypt interface. */
+#include <shlib-compat.h>
+#if TEST_COMPAT (libcrypt, GLIBC_2_0, GLIBC_2_28)
+
+#define libcrypt_version_reference(symbol, version) \
+ _libcrypt_version_reference (symbol, VERSION_libcrypt_##version)
+#define _libcrypt_version_reference(symbol, version) \
+ __libcrypt_version_reference (symbol, version)
+#define __libcrypt_version_reference(symbol, version) \
+ __asm__ (".symver " #symbol ", " #symbol "@" #version)
+
+extern void setkey (const char *);
+extern void encrypt (const char *, int);
+libcrypt_version_reference (setkey, GLIBC_2_0);
+libcrypt_version_reference (encrypt, GLIBC_2_0);
+
int totfails = 0;
int main (int argc, char *argv[]);
@@ -104,3 +120,13 @@ put8 (char *cp)
printf("%02x", t);
}
}
+
+#else /* encrypt and setkey are not available. */
+
+int
+main (void)
+{
+ return 77; /* UNSUPPORTED */
+}
+
+#endif
diff --git a/crypt/crypt-entry.c b/crypt/crypt-entry.c
index 58691fb384508d58..4e95f74878b4dc69 100644
--- a/crypt/crypt-entry.c
+++ b/crypt/crypt-entry.c
@@ -35,6 +35,7 @@
#endif
#include "crypt-private.h"
+#include <shlib-compat.h>
/* Prototypes for local functions. */
#ifndef __GNU_LIBRARY__
@@ -176,17 +177,7 @@ crypt (const char *key, const char *salt)
return __crypt_r (key, salt, &_ufc_foobar);
}
-
-/*
- * To make fcrypt users happy.
- * They don't need to call init_des.
- */
-#ifdef _LIBC
+#if SHLIB_COMPAT (libcrypt, GLIBC_2_0, GLIBC_2_28)
weak_alias (crypt, fcrypt)
-#else
-char *
-__fcrypt (const char *key, const char *salt)
-{
- return crypt (key, salt);
-}
+compat_symbol (libcrypt, fcrypt, fcrypt, GLIBC_2_0);
#endif
diff --git a/crypt/crypt.h b/crypt/crypt.h
index 5da098b7157c18c6..3cb18de14d7b42ac 100644
--- a/crypt/crypt.h
+++ b/crypt/crypt.h
@@ -32,16 +32,8 @@ __BEGIN_DECLS
extern char *crypt (const char *__key, const char *__salt)
__THROW __nonnull ((1, 2));
-/* Setup DES tables according KEY. */
-extern void setkey (const char *__key) __THROW __nonnull ((1));
-
-/* Encrypt data in BLOCK in place if EDFLAG is zero; otherwise decrypt
- block in place. */
-extern void encrypt (char *__glibc_block, int __edflag)
- __THROW __nonnull ((1));
-
#ifdef __USE_GNU
-/* Reentrant versions of the functions above. The additional argument
+/* Reentrant version of 'crypt'. The additional argument
points to a structure where the results are placed in. */
struct crypt_data
{
@@ -60,14 +52,6 @@ struct crypt_data
extern char *crypt_r (const char *__key, const char *__salt,
struct crypt_data * __restrict __data)
__THROW __nonnull ((1, 2, 3));
-
-extern void setkey_r (const char *__key,
- struct crypt_data * __restrict __data)
- __THROW __nonnull ((1, 2));
-
-extern void encrypt_r (char *__glibc_block, int __edflag,
- struct crypt_data * __restrict __data)
- __THROW __nonnull ((1, 3));
#endif
__END_DECLS
diff --git a/crypt/crypt_util.c b/crypt/crypt_util.c
index 4958918770e7845a..fbfc783751e1691b 100644
--- a/crypt/crypt_util.c
+++ b/crypt/crypt_util.c
@@ -34,6 +34,7 @@
#endif
#include "crypt-private.h"
+#include <shlib-compat.h>
/* Prototypes for local functions. */
#ifndef __GNU_LIBRARY__
@@ -150,6 +151,7 @@ static const int sbox[8][4][16]= {
}
};
+#if SHLIB_COMPAT (libcrypt, GLIBC_2_0, GLIBC_2_28)
/*
* This is the initial
* permutation matrix
@@ -160,6 +162,7 @@ static const int initial_perm[64] = {
57, 49, 41, 33, 25, 17, 9, 1, 59, 51, 43, 35, 27, 19, 11, 3,
61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7
};
+#endif
/*
* This is the final
@@ -785,6 +788,7 @@ _ufc_output_conversion_r (ufc_long v1, ufc_long v2, const char *salt,
__data->crypt_3_buf[13] = 0;
}
+#if SHLIB_COMPAT (libcrypt, GLIBC_2_0, GLIBC_2_28)
/*
* UNIX encrypt function. Takes a bitvector
@@ -885,12 +889,14 @@ __encrypt_r (char *__block, int __edflag,
}
}
weak_alias (__encrypt_r, encrypt_r)
+compat_symbol (libcrypt, encrypt_r, encrypt_r, GLIBC_2_0);
void
encrypt (char *__block, int __edflag)
{
__encrypt_r(__block, __edflag, &_ufc_foobar);
}
+compat_symbol (libcrypt, encrypt, encrypt, GLIBC_2_0);
/*
@@ -915,12 +921,15 @@ __setkey_r (const char *__key, struct crypt_data * __restrict __data)
_ufc_mk_keytab_r((char *) ktab, __data);
}
weak_alias (__setkey_r, setkey_r)
+compat_symbol (libcrypt, setkey_r, setkey_r, GLIBC_2_0);
void
setkey (const char *__key)
{
__setkey_r(__key, &_ufc_foobar);
}
+compat_symbol (libcrypt, setkey, setkey, GLIBC_2_0);
+#endif /* SHLIB_COMPAT (libcrypt, GLIBC_2_0, GLIBC_2_28) */
void
__b64_from_24bit (char **cp, int *buflen,
diff --git a/manual/conf.texi b/manual/conf.texi
index f1dce4aa44be0f29..dbd1d3028773bc5d 100644
--- a/manual/conf.texi
+++ b/manual/conf.texi
@@ -778,6 +778,8 @@ Inquire about the parameter corresponding to @code{_XOPEN_LEGACY}.
@item _SC_XOPEN_CRYPT
@standards{X/Open, unistd.h}
Inquire about the parameter corresponding to @code{_XOPEN_CRYPT}.
+@Theglibc no longer implements the @code{_XOPEN_CRYPT} extensions,
+so @samp{sysconf (_SC_XOPEN_CRYPT)} always returns @code{-1}.
@item _SC_XOPEN_ENH_I18N
@standards{X/Open, unistd.h}
diff --git a/manual/crypt.texi b/manual/crypt.texi
index 99d2d8e092a1104d..6bbe2bfdc5bfd03c 100644
--- a/manual/crypt.texi
+++ b/manual/crypt.texi
@@ -30,21 +30,10 @@ message-digest algorithm that is compatible with modern BSD systems,
and the other based on the Data Encryption Standard (DES) that is
compatible with Unix systems.
-@vindex AUTH_DES
-@cindex FIPS 140-2
-It also provides support for Secure RPC, and some library functions that
-can be used to perform normal DES encryption. The @code{AUTH_DES}
-authentication flavor in Secure RPC, as provided by @theglibc{},
-uses DES and does not comply with FIPS 140-2 nor does any other use of DES
-within @theglibc{}. It is recommended that Secure RPC should not be used
-for systems that need to comply with FIPS 140-2 since all flavors of
-encrypted authentication use normal DES.
-
@menu
* Legal Problems:: This software can get you locked up, or worse.
* getpass:: Prompting the user for a password.
* crypt:: A one-way function for passwords.
-* DES Encryption:: Routines for DES encryption.
* Unpredictable Bytes:: Randomness for cryptography purposes.
@end menu
@@ -223,196 +212,6 @@ The @code{crypt_r} function is a GNU extension.
The @code{crypt} and @code{crypt_r} functions are prototyped in the
header @file{crypt.h}.
-@node DES Encryption
-@section DES Encryption
-
-@cindex FIPS 46-3
-The Data Encryption Standard is described in the US Government Federal
-Information Processing Standards (FIPS) 46-3 published by the National
-Institute of Standards and Technology. The DES has been very thoroughly
-analyzed since it was developed in the late 1970s, and no new
-significant flaws have been found.
-
-However, the DES uses only a 56-bit key (plus 8 parity bits), and a
-machine has been built in 1998 which can search through all possible
-keys in about 6 days, which cost about US$200000; faster searches would
-be possible with more money. This makes simple DES insecure for most
-purposes, and NIST no longer permits new US government systems
-to use simple DES.
-
-For serious encryption functionality, it is recommended that one of the
-many free encryption libraries be used instead of these routines.
-
-The DES is a reversible operation which takes a 64-bit block and a
-64-bit key, and produces another 64-bit block. Usually the bits are
-numbered so that the most-significant bit, the first bit, of each block
-is numbered 1.
-
-Under that numbering, every 8th bit of the key (the 8th, 16th, and so
-on) is not used by the encryption algorithm itself. But the key must
-have odd parity; that is, out of bits 1 through 8, and 9 through 16, and
-so on, there must be an odd number of `1' bits, and this completely
-specifies the unused bits.
-
-@deftypefun void setkey (const char *@var{key})
-@standards{BSD, crypt.h}
-@standards{SVID, crypt.h}
-@safety{@prelim{}@mtunsafe{@mtasurace{:crypt}}@asunsafe{@asucorrupt{} @asulock{}}@acunsafe{@aculock{}}}
-@c The static buffer stores the key, making it fundamentally
-@c thread-unsafe. The locking issues are only in the initialization
-@c path; cancelling the initialization will leave the lock held, it
-@c would otherwise repeat the initialization on the next call.
-
-The @code{setkey} function sets an internal data structure to be an
-expanded form of @var{key}. @var{key} is specified as an array of 64
-bits each stored in a @code{char}, the first bit is @code{key[0]} and
-the 64th bit is @code{key[63]}. The @var{key} should have the correct
-parity.
-@end deftypefun
-
-@deftypefun void encrypt (char *@var{block}, int @var{edflag})
-@standards{BSD, crypt.h}
-@standards{SVID, crypt.h}
-@safety{@prelim{}@mtunsafe{@mtasurace{:crypt}}@asunsafe{@asucorrupt{} @asulock{}}@acunsafe{@aculock{}}}
-@c Same issues as setkey.
-
-The @code{encrypt} function encrypts @var{block} if
-@var{edflag} is 0, otherwise it decrypts @var{block}, using a key
-previously set by @code{setkey}. The result is
-placed in @var{block}.
-
-Like @code{setkey}, @var{block} is specified as an array of 64 bits each
-stored in a @code{char}, but there are no parity bits in @var{block}.
-@end deftypefun
-
-@deftypefun void setkey_r (const char *@var{key}, {struct crypt_data *} @var{data})
-@deftypefunx void encrypt_r (char *@var{block}, int @var{edflag}, {struct crypt_data *} @var{data})
-@standards{GNU, crypt.h}
-@c setkey_r: @safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @asulock{}}@acunsafe{@aculock{}}}
-@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @asulock{}}@acunsafe{@aculock{}}}
-
-These are reentrant versions of @code{setkey} and @code{encrypt}. The
-only difference is the extra parameter, which stores the expanded
-version of @var{key}. Before calling @code{setkey_r} the first time,
-@code{data->initialized} must be cleared to zero.
-@end deftypefun
-
-The @code{setkey_r} and @code{encrypt_r} functions are GNU extensions.
-@code{setkey}, @code{encrypt}, @code{setkey_r}, and @code{encrypt_r} are
-defined in @file{crypt.h}.
-
-@deftypefun int ecb_crypt (char *@var{key}, char *@var{blocks}, unsigned int @var{len}, unsigned int @var{mode})
-@standards{SUNRPC, rpc/des_crypt.h}
-@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
-
-The function @code{ecb_crypt} encrypts or decrypts one or more blocks
-using DES. Each block is encrypted independently.
-
-The @var{blocks} and the @var{key} are stored packed in 8-bit bytes, so
-that the first bit of the key is the most-significant bit of
-@code{key[0]} and the 63rd bit of the key is stored as the
-least-significant bit of @code{key[7]}. The @var{key} should have the
-correct parity.
-
-@var{len} is the number of bytes in @var{blocks}. It should be a
-multiple of 8 (so that there are a whole number of blocks to encrypt).
-@var{len} is limited to a maximum of @code{DES_MAXDATA} bytes.
-
-The result of the encryption replaces the input in @var{blocks}.
-
-The @var{mode} parameter is the bitwise OR of two of the following:
-
-@vtable @code
-@item DES_ENCRYPT
-@standards{SUNRPC, rpc/des_crypt.h}
-This constant, used in the @var{mode} parameter, specifies that
-@var{blocks} is to be encrypted.
-
-@item DES_DECRYPT
-@standards{SUNRPC, rpc/des_crypt.h}
-This constant, used in the @var{mode} parameter, specifies that
-@var{blocks} is to be decrypted.
-
-@item DES_HW
-@standards{SUNRPC, rpc/des_crypt.h}
-This constant, used in the @var{mode} parameter, asks to use a hardware
-device. If no hardware device is available, encryption happens anyway,
-but in software.
-
-@item DES_SW
-@standards{SUNRPC, rpc/des_crypt.h}
-This constant, used in the @var{mode} parameter, specifies that no
-hardware device is to be used.
-@end vtable
-
-The result of the function will be one of these values:
-
-@vtable @code
-@item DESERR_NONE
-@standards{SUNRPC, rpc/des_crypt.h}
-The encryption succeeded.
-
-@item DESERR_NOHWDEVICE
-@standards{SUNRPC, rpc/des_crypt.h}
-The encryption succeeded, but there was no hardware device available.
-
-@item DESERR_HWERROR
-@standards{SUNRPC, rpc/des_crypt.h}
-The encryption failed because of a hardware problem.
-
-@item DESERR_BADPARAM
-@standards{SUNRPC, rpc/des_crypt.h}
-The encryption failed because of a bad parameter, for instance @var{len}
-is not a multiple of 8 or @var{len} is larger than @code{DES_MAXDATA}.
-@end vtable
-@end deftypefun
-
-@deftypefun int DES_FAILED (int @var{err})
-@standards{SUNRPC, rpc/des_crypt.h}
-@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
-This macro returns 1 if @var{err} is a `success' result code from
-@code{ecb_crypt} or @code{cbc_crypt}, and 0 otherwise.
-@end deftypefun
-
-@deftypefun int cbc_crypt (char *@var{key}, char *@var{blocks}, unsigned int @var{len}, unsigned int @var{mode}, char *@var{ivec})
-@standards{SUNRPC, rpc/des_crypt.h}
-@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
-
-The function @code{cbc_crypt} encrypts or decrypts one or more blocks
-using DES in Cipher Block Chaining mode.
-
-For encryption in CBC mode, each block is exclusive-ored with @var{ivec}
-before being encrypted, then @var{ivec} is replaced with the result of
-the encryption, then the next block is processed. Decryption is the
-reverse of this process.
-
-This has the advantage that blocks which are the same before being
-encrypted are very unlikely to be the same after being encrypted, making
-it much harder to detect patterns in the data.
-
-Usually, @var{ivec} is set to 8 random bytes before encryption starts.
-Then the 8 random bytes are transmitted along with the encrypted data
-(without themselves being encrypted), and passed back in as @var{ivec}
-for decryption. Another possibility is to set @var{ivec} to 8 zeroes
-initially, and have the first block encrypted consist of 8 random
-bytes.
-
-Otherwise, all the parameters are similar to those for @code{ecb_crypt}.
-@end deftypefun
-
-@deftypefun void des_setparity (char *@var{key})
-@standards{SUNRPC, rpc/des_crypt.h}
-@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
-
-The function @code{des_setparity} changes the 64-bit @var{key}, stored
-packed in 8-bit bytes, to have odd parity by altering the low bits of
-each byte.
-@end deftypefun
-
-The @code{ecb_crypt}, @code{cbc_crypt}, and @code{des_setparity}
-functions and their accompanying macros are all defined in the header
-@file{rpc/des_crypt.h}.
-
@node Unpredictable Bytes
@section Generating Unpredictable Bytes
diff --git a/manual/string.texi b/manual/string.texi
index b07cfb4550ae6a58..a1c58e58fa488f78 100644
--- a/manual/string.texi
+++ b/manual/string.texi
@@ -36,8 +36,8 @@ too.
for delimiters.
* Erasing Sensitive Data:: Clearing memory which contains sensitive
data, after it's no longer needed.
-* strfry:: Function for flash-cooking a string.
-* Trivial Encryption:: Obscuring data.
+* Shuffling Bytes:: Or how to flash-cook a string.
+* Obfuscating Data:: Reversibly obscuring data from casual view.
* Encode Binary Data:: Encoding and Decoding of Binary Data.
* Argz and Envz Vectors:: Null-separated string vectors.
@end menu
@@ -2426,73 +2426,73 @@ functionality under a different name, such as @code{explicit_memset},
systems it may be in @file{strings.h} instead.
@end deftypefun
-@node strfry
-@section strfry
+
+@node Shuffling Bytes
+@section Shuffling Bytes
The function below addresses the perennial programming quandary: ``How do
I take good data in string form and painlessly turn it into garbage?''
-This is actually a fairly simple task for C programmers who do not use
-@theglibc{} string functions, but for programs based on @theglibc{},
-the @code{strfry} function is the preferred method for
-destroying string data.
+This is not a difficult thing to code for oneself, but the authors of
+@theglibc{} wish to make it as convenient as possible.
-The prototype for this function is in @file{string.h}.
+To @emph{erase} data, use @code{explicit_bzero} (@pxref{Erasing
+Sensitive Data}); to obfuscate it reversibly, use @code{memfrob}
+(@pxref{Obfuscating Data}).
@deftypefun {char *} strfry (char *@var{string})
@standards{GNU, string.h}
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@c Calls initstate_r, time, getpid, strlen, and random_r.
-@code{strfry} creates a pseudorandom anagram of a string, replacing the
-input with the anagram in place. For each position in the string,
-@code{strfry} swaps it with a position in the string selected at random
-(from a uniform distribution). The two positions may be the same.
+@code{strfry} performs an in-place shuffle on @var{string}. Each
+character is swapped to a position selected at random, within the
+portion of the string starting with the character's original position.
+(This is the Fisher-Yates algorithm for unbiased shuffling.)
+
+Calling @code{strfry} will not disturb any of the random number
+generators that have global state (@pxref{Pseudo-Random Numbers}).
The return value of @code{strfry} is always @var{string}.
@strong{Portability Note:} This function is unique to @theglibc{}.
-
+It is declared in @file{string.h}.
@end deftypefun
-@node Trivial Encryption
-@section Trivial Encryption
-@cindex encryption
-
-
-The @code{memfrob} function converts an array of data to something
-unrecognizable and back again. It is not encryption in its usual sense
-since it is easy for someone to convert the encrypted data back to clear
-text. The transformation is analogous to Usenet's ``Rot13'' encryption
-method for obscuring offensive jokes from sensitive eyes and such.
-Unlike Rot13, @code{memfrob} works on arbitrary binary data, not just
-text.
+@node Obfuscating Data
+@section Obfuscating Data
@cindex Rot13
-For true encryption, @xref{Cryptographic Functions}.
+The @code{memfrob} function reversibly obfuscates an array of binary
+data. This is not true encryption; the obfuscated data still bears a
+clear relationship to the original, and no secret key is required to
+undo the obfuscation. It is analogous to the ``Rot13'' cipher used on
+Usenet for obscuring offensive jokes, spoilers for works of fiction,
+and so on, but it can be applied to arbitrary binary data.
-This function is declared in @file{string.h}.
-@pindex string.h
+Programs that need true encryption---a transformation that completely
+obscures the original and cannot be reversed without knowledge of a
+secret key---should use a dedicated cryptography library, such as
+@uref{https://www.gnu.org/software/libgcrypt/,,libgcrypt}.
+
+Programs that need to @emph{destroy} data should use
+@code{explicit_bzero} (@pxref{Erasing Sensitive Data}), or possibly
+@code{strfry} (@pxref{Shuffling Bytes}).
@deftypefun {void *} memfrob (void *@var{mem}, size_t @var{length})
@standards{GNU, string.h}
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
-@code{memfrob} transforms (frobnicates) each byte of the data structure
-at @var{mem}, which is @var{length} bytes long, by bitwise exclusive
-oring it with binary 00101010. It does the transformation in place and
-its return value is always @var{mem}.
+The function @code{memfrob} obfuscates @var{length} bytes of data
+beginning at @var{mem}, in place. Each byte is bitwise xor-ed with
+the binary pattern 00101010 (hexadecimal 0x2A). The return value is
+always @var{mem}.
-Note that @code{memfrob} a second time on the same data structure
-returns it to its original state.
-
-This is a good function for hiding information from someone who doesn't
-want to see it or doesn't want to see it very much. To really prevent
-people from retrieving the information, use stronger encryption such as
-that described in @xref{Cryptographic Functions}.
+@code{memfrob} a second time on the same data returns it to
+its original state.
@strong{Portability Note:} This function is unique to @theglibc{}.
-
+It is declared in @file{string.h}.
@end deftypefun
@node Encode Binary Data
diff --git a/posix/unistd.h b/posix/unistd.h
index 4d149f994534ea5f..afb08f5186b9173b 100644
--- a/posix/unistd.h
+++ b/posix/unistd.h
@@ -107,9 +107,6 @@ __BEGIN_DECLS
/* The X/Open Unix extensions are available. */
#define _XOPEN_UNIX 1
-/* Encryption is present. */
-#define _XOPEN_CRYPT 1
-
/* The enhanced internationalization capabilities according to XPG4.2
are present. */
#define _XOPEN_ENH_I18N 1
@@ -1118,20 +1115,13 @@ ssize_t copy_file_range (int __infd, __off64_t *__pinoff,
extern int fdatasync (int __fildes);
#endif /* Use POSIX199309 */
-
-/* XPG4.2 specifies that prototypes for the encryption functions must
- be defined here. */
-#ifdef __USE_XOPEN
+#ifdef __USE_MISC
/* Encrypt at most 8 characters from KEY using salt to perturb DES. */
extern char *crypt (const char *__key, const char *__salt)
__THROW __nonnull ((1, 2));
+#endif
-/* Encrypt data in BLOCK in place if EDFLAG is zero; otherwise decrypt
- block in place. */
-extern void encrypt (char *__glibc_block, int __edflag)
- __THROW __nonnull ((1));
-
-
+#ifdef __USE_XOPEN
/* Swab pairs bytes in the first N bytes of the area pointed to by
FROM and copy the result to TO. The value of TO must not be in the
range [FROM - N + 1, FROM - 1]. If N is odd the first byte in FROM
diff --git a/stdlib/stdlib.h b/stdlib/stdlib.h
index 6b1ead31e02e3195..8e23e935576cb3b8 100644
--- a/stdlib/stdlib.h
+++ b/stdlib/stdlib.h
@@ -958,12 +958,6 @@ extern int getsubopt (char **__restrict __optionp,
#endif
-#ifdef __USE_XOPEN
-/* Setup DES tables according KEY. */
-extern void setkey (const char *__key) __THROW __nonnull ((1));
-#endif
-
-
/* X/Open pseudo terminal handling. */
#ifdef __USE_XOPEN2KXSI
diff --git a/sunrpc/Makefile b/sunrpc/Makefile
index 8f2a3c8213e3564e..ab2e0daaea5c7636 100644
--- a/sunrpc/Makefile
+++ b/sunrpc/Makefile
@@ -51,7 +51,7 @@ rpcsvc = bootparam_prot.x nlm_prot.x rstat.x \
headers-sunrpc = $(addprefix rpc/,auth.h auth_unix.h clnt.h pmap_clnt.h \
pmap_prot.h pmap_rmt.h rpc.h rpc_msg.h \
svc.h svc_auth.h types.h xdr.h auth_des.h \
- des_crypt.h key_prot.h rpc_des.h) \
+ key_prot.h) \
$(rpcsvc:%=rpcsvc/%) rpcsvc/bootparam.h
headers = rpc/netdb.h
install-others = $(inst_sysconfdir)/rpc
diff --git a/sunrpc/des_crypt.c b/sunrpc/des_crypt.c
index a4d8b2936bf1f52d..9b4bd2d5ddff9a40 100644
--- a/sunrpc/des_crypt.c
+++ b/sunrpc/des_crypt.c
@@ -86,6 +86,9 @@ common_crypt (char *key, char *buf, register unsigned len,
return desdev == DES_SW ? DESERR_NONE : DESERR_NOHWDEVICE;
}
+/* Note: these cannot be excluded from the build yet, because they are
+ still used internally. */
+
/*
* CBC mode encryption
*/
@@ -102,7 +105,7 @@ cbc_crypt (char *key, char *buf, unsigned int len, unsigned int mode,
COPY8 (dp.des_ivec, ivec);
return err;
}
-libc_hidden_nolink_sunrpc (cbc_crypt, GLIBC_2_1)
+hidden_nolink (cbc_crypt, libc, GLIBC_2_1)
/*
* ECB mode encryption
@@ -115,4 +118,4 @@ ecb_crypt (char *key, char *buf, unsigned int len, unsigned int mode)
dp.des_mode = ECB;
return common_crypt (key, buf, len, mode, &dp);
}
-libc_hidden_nolink_sunrpc (ecb_crypt, GLIBC_2_1)
+hidden_nolink (ecb_crypt, libc, GLIBC_2_1)
diff --git a/sunrpc/des_soft.c b/sunrpc/des_soft.c
index f884f8f21b7dbd86..a87de96cc75727d9 100644
--- a/sunrpc/des_soft.c
+++ b/sunrpc/des_soft.c
@@ -71,4 +71,4 @@ des_setparity (char *p)
p++;
}
}
-libc_hidden_nolink_sunrpc (des_setparity, GLIBC_2_1)
+hidden_nolink (des_setparity, libc, GLIBC_2_1)

261
glibc-disable-crypt-2.patch Normal file
View File

@ -0,0 +1,261 @@
commit 6ab902e4decd89c1a9206497d14ddba7680bfc37
Author: Zack Weinberg <zackw@panix.com>
Date: Fri Jun 29 16:53:29 2018 +0200
manual: Reorganize crypt.texi.
In preparation for a major revision of the documentation for
crypt(_r), getentropy, and getrandom, reorganize crypt.texi. This
patch does not change any text; it only deletes and moves text.
The description of 'getpass' moves to terminal.texi, since all it does
is read a password from the controlling terminal with echo disabled.
The "Legal Problems" section of crypt.texi is dropped, and the
introductory text is shifted down to the "Encrypting Passwords"
section; the next patch will add some new introductory text.
Also, it is no longer true that crypt.texi's top @node needs to have
no pointers. That was a vestige of crypt/ being an add-on. (makeinfo
itself doesn't need @node pointers anymore, but the scripts that
assemble the libc manual's topmost node rely on each chapter-level
node having them.)
diff --git a/manual/crypt.texi b/manual/crypt.texi
index 6bbe2bfdc5bfd03c..0f04ee9899fabd91 100644
--- a/manual/crypt.texi
+++ b/manual/crypt.texi
@@ -1,8 +1,14 @@
-@c This node must have no pointers.
-@node Cryptographic Functions
-@c @node Cryptographic Functions, Debugging Support, System Configuration, Top
-@chapter DES Encryption and Password Handling
-@c %MENU% DES encryption and password handling
+@node Cryptographic Functions, Debugging Support, System Configuration, Top
+@chapter Cryptographic Functions
+@c %MENU% Password storage and strongly unpredictable bytes
+
+@menu
+* crypt:: A one-way function for passwords.
+* Unpredictable Bytes:: Randomness for cryptography purposes.
+@end menu
+
+@node crypt
+@section Encrypting Passwords
On many systems, it is unnecessary to have any kind of user
authentication; for instance, a workstation which is not connected to a
@@ -30,103 +36,6 @@ message-digest algorithm that is compatible with modern BSD systems,
and the other based on the Data Encryption Standard (DES) that is
compatible with Unix systems.
-@menu
-* Legal Problems:: This software can get you locked up, or worse.
-* getpass:: Prompting the user for a password.
-* crypt:: A one-way function for passwords.
-* Unpredictable Bytes:: Randomness for cryptography purposes.
-@end menu
-
-@node Legal Problems
-@section Legal Problems
-
-Because of the continuously changing state of the law, it's not possible
-to provide a definitive survey of the laws affecting cryptography.
-Instead, this section warns you of some of the known trouble spots; this
-may help you when you try to find out what the laws of your country are.
-
-Some countries require that you have a license to use, possess, or import
-cryptography. These countries are believed to include Byelorussia,
-Burma, India, Indonesia, Israel, Kazakhstan, Pakistan, Russia, and Saudi
-Arabia.
-
-Some countries restrict the transmission of encrypted messages by radio;
-some telecommunications carriers restrict the transmission of encrypted
-messages over their network.
-
-Many countries have some form of export control for encryption software.
-The Wassenaar Arrangement is a multilateral agreement between 33
-countries (Argentina, Australia, Austria, Belgium, Bulgaria, Canada, the
-Czech Republic, Denmark, Finland, France, Germany, Greece, Hungary,
-Ireland, Italy, Japan, Luxembourg, the Netherlands, New Zealand, Norway,
-Poland, Portugal, the Republic of Korea, Romania, the Russian
-Federation, the Slovak Republic, Spain, Sweden, Switzerland, Turkey,
-Ukraine, the United Kingdom and the United States) which restricts some
-kinds of encryption exports. Different countries apply the arrangement
-in different ways; some do not allow the exception for certain kinds of
-``public domain'' software (which would include this library), some
-only restrict the export of software in tangible form, and others impose
-significant additional restrictions.
-
-The United States has additional rules. This software would generally
-be exportable under 15 CFR 740.13(e), which permits exports of
-``encryption source code'' which is ``publicly available'' and which is
-``not subject to an express agreement for the payment of a licensing fee or
-royalty for commercial production or sale of any product developed with
-the source code'' to most countries.
-
-The rules in this area are continuously changing. If you know of any
-information in this manual that is out-of-date, please report it to
-the bug database. @xref{Reporting Bugs}.
-
-@node getpass
-@section Reading Passwords
-
-When reading in a password, it is desirable to avoid displaying it on
-the screen, to help keep it secret. The following function handles this
-in a convenient way.
-
-@deftypefun {char *} getpass (const char *@var{prompt})
-@standards{BSD, unistd.h}
-@safety{@prelim{}@mtunsafe{@mtasuterm{}}@asunsafe{@ascuheap{} @asulock{} @asucorrupt{}}@acunsafe{@acuterm{} @aculock{} @acucorrupt{}}}
-@c This function will attempt to create a stream for terminal I/O, but
-@c will fallback to stdio/stderr. It attempts to change the terminal
-@c mode in a thread-unsafe way, write out the prompt, read the password,
-@c then restore the terminal mode. It has a cleanup to close the stream
-@c in case of (synchronous) cancellation, but not to restore the
-@c terminal mode.
-
-@code{getpass} outputs @var{prompt}, then reads a string in from the
-terminal without echoing it. It tries to connect to the real terminal,
-@file{/dev/tty}, if possible, to encourage users not to put plaintext
-passwords in files; otherwise, it uses @code{stdin} and @code{stderr}.
-@code{getpass} also disables the INTR, QUIT, and SUSP characters on the
-terminal using the @code{ISIG} terminal attribute (@pxref{Local Modes}).
-The terminal is flushed before and after @code{getpass}, so that
-characters of a mistyped password are not accidentally visible.
-
-In other C libraries, @code{getpass} may only return the first
-@code{PASS_MAX} bytes of a password. @Theglibc{} has no limit, so
-@code{PASS_MAX} is undefined.
-
-The prototype for this function is in @file{unistd.h}. @code{PASS_MAX}
-would be defined in @file{limits.h}.
-@end deftypefun
-
-This precise set of operations may not suit all possible situations. In
-this case, it is recommended that users write their own @code{getpass}
-substitute. For instance, a very simple substitute is as follows:
-
-@smallexample
-@include mygetpass.c.texi
-@end smallexample
-
-The substitute takes the same parameters as @code{getline}
-(@pxref{Line Input}); the user must print any prompt desired.
-
-@node crypt
-@section Encrypting Passwords
-
@deftypefun {char *} crypt (const char *@var{key}, const char *@var{salt})
@standards{BSD, crypt.h}
@standards{SVID, crypt.h}
@@ -177,6 +86,23 @@ password against the result of a previous call to @code{crypt}, pass
the result of the previous call as the @var{salt}.
@end deftypefun
+@deftypefun {char *} crypt_r (const char *@var{key}, const char *@var{salt}, {struct crypt_data *} @var{data})
+@standards{GNU, crypt.h}
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @asulock{} @ascuheap{} @ascudlopen{}}@acunsafe{@aculock{} @acsmem{}}}
+@c Compared with crypt, this function fixes the @mtasurace:crypt
+@c problem, but nothing else.
+
+The @code{crypt_r} function does the same thing as @code{crypt}, but
+takes an extra parameter which includes space for its result (among
+other things), so it can be reentrant. @code{data@w{->}initialized} must be
+cleared to zero before the first time @code{crypt_r} is called.
+
+The @code{crypt_r} function is a GNU extension.
+@end deftypefun
+
+The @code{crypt} and @code{crypt_r} functions are prototyped in the
+header @file{crypt.h}.
+
The following short program is an example of how to use @code{crypt} the
first time a password is entered. Note that the @var{salt} generation
is just barely acceptable; in particular, it is not unique between
@@ -195,23 +121,6 @@ for a password and prints ``Access granted.'' if the user types
@include testpass.c.texi
@end smallexample
-@deftypefun {char *} crypt_r (const char *@var{key}, const char *@var{salt}, {struct crypt_data *} @var{data})
-@standards{GNU, crypt.h}
-@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @asulock{} @ascuheap{} @ascudlopen{}}@acunsafe{@aculock{} @acsmem{}}}
-@c Compared with crypt, this function fixes the @mtasurace:crypt
-@c problem, but nothing else.
-
-The @code{crypt_r} function does the same thing as @code{crypt}, but
-takes an extra parameter which includes space for its result (among
-other things), so it can be reentrant. @code{data@w{->}initialized} must be
-cleared to zero before the first time @code{crypt_r} is called.
-
-The @code{crypt_r} function is a GNU extension.
-@end deftypefun
-
-The @code{crypt} and @code{crypt_r} functions are prototyped in the
-header @file{crypt.h}.
-
@node Unpredictable Bytes
@section Generating Unpredictable Bytes
diff --git a/manual/terminal.texi b/manual/terminal.texi
index 4aace48b14034533..0b275fc0023d6a3b 100644
--- a/manual/terminal.texi
+++ b/manual/terminal.texi
@@ -24,6 +24,7 @@ descriptor is and how to open a file descriptor for a terminal device.
* Line Control:: Sending break sequences, clearing
terminal buffers @dots{}
* Noncanon Example:: How to read single characters without echo.
+* getpass:: Prompting the user for a password.
* Pseudo-Terminals:: How to open a pseudo-terminal.
@end menu
@@ -1871,6 +1872,50 @@ existing shells do not actually do this, so you may wish to establish
handlers for job control signals that reset terminal modes. The above
example does so.
+@node getpass
+@section Reading Passwords
+
+When reading in a password, it is desirable to avoid displaying it on
+the screen, to help keep it secret. The following function handles this
+in a convenient way.
+
+@deftypefun {char *} getpass (const char *@var{prompt})
+@standards{BSD, unistd.h}
+@safety{@prelim{}@mtunsafe{@mtasuterm{}}@asunsafe{@ascuheap{} @asulock{} @asucorrupt{}}@acunsafe{@acuterm{} @aculock{} @acucorrupt{}}}
+@c This function will attempt to create a stream for terminal I/O, but
+@c will fallback to stdio/stderr. It attempts to change the terminal
+@c mode in a thread-unsafe way, write out the prompt, read the password,
+@c then restore the terminal mode. It has a cleanup to close the stream
+@c in case of (synchronous) cancellation, but not to restore the
+@c terminal mode.
+
+@code{getpass} outputs @var{prompt}, then reads a string in from the
+terminal without echoing it. It tries to connect to the real terminal,
+@file{/dev/tty}, if possible, to encourage users not to put plaintext
+passwords in files; otherwise, it uses @code{stdin} and @code{stderr}.
+@code{getpass} also disables the INTR, QUIT, and SUSP characters on the
+terminal using the @code{ISIG} terminal attribute (@pxref{Local Modes}).
+The terminal is flushed before and after @code{getpass}, so that
+characters of a mistyped password are not accidentally visible.
+
+In other C libraries, @code{getpass} may only return the first
+@code{PASS_MAX} bytes of a password. @Theglibc{} has no limit, so
+@code{PASS_MAX} is undefined.
+
+The prototype for this function is in @file{unistd.h}. @code{PASS_MAX}
+would be defined in @file{limits.h}.
+@end deftypefun
+
+This precise set of operations may not suit all possible situations. In
+this case, it is recommended that users write their own @code{getpass}
+substitute. For instance, a very simple substitute is as follows:
+
+@smallexample
+@include mygetpass.c.texi
+@end smallexample
+
+The substitute takes the same parameters as @code{getline}
+(@pxref{Line Input}); the user must print any prompt desired.
@node Pseudo-Terminals
@section Pseudo-Terminals

1164
glibc-disable-crypt-3.patch Normal file

File diff suppressed because it is too large Load Diff

310
glibc-disable-crypt-4.patch Normal file
View File

@ -0,0 +1,310 @@
commit e69d994a63afc2d367f286a2a7df28cbf710f0fe
Author: Zack Weinberg <zackw@panix.com>
Date: Fri Jun 29 16:53:47 2018 +0200
New configure option --disable-crypt.
Some Linux distributions are experimenting with a new, separately
maintained and hopefully more agile implementation of the crypt
API. To facilitate this, add a configure option which disables
glibc's embedded libcrypt. When this option is given, libcrypt.*
and crypt.h will not be built nor installed.
diff --git a/INSTALL b/INSTALL
index 64dec3473e1f0c1f..87c9cf97c81b49bc 100644
--- a/INSTALL
+++ b/INSTALL
@@ -188,6 +188,17 @@ will be used, and CFLAGS sets optimization options for the compiler.
libnss_nisplus are not built at all. Use this option to enable
libnsl with all depending NSS modules and header files.
+'--disable-crypt'
+ Do not install the passphrase-hashing library 'libcrypt' or the
+ header file 'crypt.h'. 'unistd.h' will still declare the function
+ 'crypt'. Using this option does not change the set of programs
+ that may need to be linked with '-lcrypt'; it only means that the
+ GNU C Library will not provide that library.
+
+ This option is for hackers and distributions experimenting with
+ independently-maintained implementations of libcrypt. It may
+ become the default in a future release.
+
'--disable-experimental-malloc'
By default, a per-thread cache is enabled in 'malloc'. While this
cache can be disabled on a per-application basis using tunables
diff --git a/Makeconfig b/Makeconfig
index 86a71e580213f6e5..de0eb1b5e99e752a 100644
--- a/Makeconfig
+++ b/Makeconfig
@@ -566,7 +566,7 @@ link-libc-printers-tests = $(link-libc-rpath) \
$(link-libc-tests-after-rpath-link)
# This is how to find at build-time things that will be installed there.
-rpath-dirs = math elf dlfcn nss nis rt resolv crypt mathvec support
+rpath-dirs = math elf dlfcn nss nis rt resolv mathvec support
rpath-link = \
$(common-objdir):$(subst $(empty) ,:,$(patsubst ../$(subdir),.,$(rpath-dirs:%=$(common-objpfx)%)))
else # build-static
@@ -1201,9 +1201,14 @@ all-subdirs = csu assert ctype locale intl catgets math setjmp signal \
stdlib stdio-common libio malloc string wcsmbs time dirent \
grp pwd posix io termios resource misc socket sysvipc gmon \
gnulib iconv iconvdata wctype manual shadow gshadow po argp \
- crypt localedata timezone rt conform debug mathvec support \
+ localedata timezone rt conform debug mathvec support \
dlfcn elf
+ifeq ($(build-crypt),yes)
+all-subdirs += crypt
+rpath-dirs += crypt
+endif
+
ifndef avoid-generated
# sysd-sorted itself will contain rules making the sysd-sorted target
# depend on Depend files. But if you just added a Depend file to an
diff --git a/config.make.in b/config.make.in
index 9e5e24b2c685bef6..d9891b2cd8ec3fbf 100644
--- a/config.make.in
+++ b/config.make.in
@@ -96,6 +96,7 @@ cross-compiling = @cross_compiling@
force-install = @force_install@
link-obsolete-rpc = @link_obsolete_rpc@
build-obsolete-nsl = @build_obsolete_nsl@
+build-crypt = @build_crypt@
build-nscd = @build_nscd@
use-nscd = @use_nscd@
build-hardcoded-path-in-tests= @hardcoded_path_in_tests@
diff --git a/configure b/configure
index 7a8bd3f817be359c..ef1830221522b7a5 100755
--- a/configure
+++ b/configure
@@ -676,6 +676,7 @@ build_obsolete_nsl
link_obsolete_rpc
libc_cv_static_nss_crypt
libc_cv_nss_crypt
+build_crypt
experimental_malloc
enable_werror
all_warnings
@@ -779,6 +780,7 @@ enable_all_warnings
enable_werror
enable_multi_arch
enable_experimental_malloc
+enable_crypt
enable_nss_crypt
enable_obsolete_rpc
enable_obsolete_nsl
@@ -1448,6 +1450,8 @@ Optional Features:
architectures
--disable-experimental-malloc
disable experimental malloc features
+ --disable-crypt do not build nor install the passphrase hashing
+ library, libcrypt
--enable-nss-crypt enable libcrypt to use nss
--enable-obsolete-rpc build and install the obsolete RPC code for
link-time usage
@@ -3505,6 +3509,15 @@ fi
+# Check whether --enable-crypt was given.
+if test "${enable_crypt+set}" = set; then :
+ enableval=$enable_crypt; build_crypt=$enableval
+else
+ build_crypt=yes
+fi
+
+
+
# Check whether --enable-nss-crypt was given.
if test "${enable_nss_crypt+set}" = set; then :
enableval=$enable_nss_crypt; nss_crypt=$enableval
@@ -3512,6 +3525,11 @@ else
nss_crypt=no
fi
+if test x$build_libcrypt = xno && test x$nss_crypt = xyes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --enable-nss-crypt has no effect when libcrypt is disabled" >&5
+$as_echo "$as_me: WARNING: --enable-nss-crypt has no effect when libcrypt is disabled" >&2;}
+ nss_crypt=no
+fi
if test x$nss_crypt = xyes; then
nss_includes=-I$(nss-config --includedir 2>/dev/null)
if test $? -ne 0; then
diff --git a/configure.ac b/configure.ac
index ca1282a6b3f8c536..dc517017f588626a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -302,11 +302,22 @@ AC_ARG_ENABLE([experimental-malloc],
[experimental_malloc=yes])
AC_SUBST(experimental_malloc)
+AC_ARG_ENABLE([crypt],
+ AC_HELP_STRING([--disable-crypt],
+ [do not build nor install the passphrase hashing library, libcrypt]),
+ [build_crypt=$enableval],
+ [build_crypt=yes])
+AC_SUBST(build_crypt)
+
AC_ARG_ENABLE([nss-crypt],
AC_HELP_STRING([--enable-nss-crypt],
[enable libcrypt to use nss]),
[nss_crypt=$enableval],
[nss_crypt=no])
+if test x$build_libcrypt = xno && test x$nss_crypt = xyes; then
+ AC_MSG_WARN([--enable-nss-crypt has no effect when libcrypt is disabled])
+ nss_crypt=no
+fi
if test x$nss_crypt = xyes; then
nss_includes=-I$(nss-config --includedir 2>/dev/null)
if test $? -ne 0; then
diff --git a/conform/Makefile b/conform/Makefile
index 864fdeca2168dff6..74fbda078618c902 100644
--- a/conform/Makefile
+++ b/conform/Makefile
@@ -193,13 +193,11 @@ linknamespace-libs-thr = $(linknamespace-libs-isoc) \
$(common-objpfx)rt/librt.a $(static-thread-library)
linknamespace-libs-posix = $(linknamespace-libs-thr) \
$(common-objpfx)dlfcn/libdl.a
-linknamespace-libs-xsi = $(linknamespace-libs-posix) \
- $(common-objpfx)crypt/libcrypt.a
+linknamespace-libs-xsi = $(linknamespace-libs-posix)
linknamespace-libs-ISO = $(linknamespace-libs-isoc)
linknamespace-libs-ISO99 = $(linknamespace-libs-isoc)
linknamespace-libs-ISO11 = $(linknamespace-libs-isoc)
-linknamespace-libs-XPG4 = $(linknamespace-libs-isoc) \
- $(common-objpfx)crypt/libcrypt.a
+linknamespace-libs-XPG4 = $(linknamespace-libs-isoc)
linknamespace-libs-XPG42 = $(linknamespace-libs-XPG4)
linknamespace-libs-POSIX = $(linknamespace-libs-thr)
linknamespace-libs-UNIX98 = $(linknamespace-libs-xsi)
@@ -209,6 +207,11 @@ linknamespace-libs-XOPEN2K8 = $(linknamespace-libs-xsi)
linknamespace-libs = $(foreach std,$(conformtest-standards),\
$(linknamespace-libs-$(std)))
+ifeq ($(build-crypt),yes)
+linknamespace-libs-xsi += $(common-objpfx)crypt/libcrypt.a
+linknamespace-libs-XPG4 += $(common-objpfx)crypt/libcrypt.a
+endif
+
$(linknamespace-symlist-stdlibs-tests): $(objpfx)symlist-stdlibs-%: \
$(linknamespace-libs)
LC_ALL=C $(READELF) -W -s $(linknamespace-libs-$*) > $@; \
diff --git a/crypt/Makefile b/crypt/Makefile
index 303800df73496cb3..3811b6e298509567 100644
--- a/crypt/Makefile
+++ b/crypt/Makefile
@@ -32,10 +32,6 @@ libcrypt-routines := crypt-entry md5-crypt sha256-crypt sha512-crypt crypt \
tests := cert md5c-test sha256c-test sha512c-test badsalttest
-ifeq ($(crypt-in-libc),yes)
-routines += $(libcrypt-routines)
-endif
-
ifeq ($(nss-crypt),yes)
nss-cpp-flags := -DUSE_NSS \
-I$(shell nss-config --includedir) -I$(shell nspr-config --includedir)
diff --git a/elf/Makefile b/elf/Makefile
index 2113871ff79d2313..8625dd80575977d0 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -395,14 +395,21 @@ $(objpfx)tst-_dl_addr_inside_object: $(objpfx)dl-addr-obj.os
CFLAGS-tst-_dl_addr_inside_object.c += $(PIE-ccflag)
endif
-# By default tst-linkall-static should try to use crypt routines to test
-# static libcrypt use.
+# We can only test static libcrypt use if libcrypt has been built,
+# and either NSS crypto is not in use, or static NSS libraries are
+# available.
+ifeq ($(build-crypt),no)
+CFLAGS-tst-linkall-static.c += -DUSE_CRYPT=0
+else
+ifeq ($(nss-crypt),no)
+CFLAGS-tst-linkall-static.c += -DUSE_CRYPT=1
+else
+ifeq ($(static-nss-crypt),no)
+CFLAGS-tst-linkall-static.c += -DUSE_CRYPT=0
+else
CFLAGS-tst-linkall-static.c += -DUSE_CRYPT=1
-# However, if we are using NSS crypto and we don't have a static
-# library, then we exclude the use of crypt functions in the test.
-# We similarly exclude libcrypt.a from the static link (see below).
-ifeq (yesno,$(nss-crypt)$(static-nss-crypt))
-CFLAGS-tst-linkall-static.c += -UUSE_CRYPT -DUSE_CRYPT=0
+endif
+endif
endif
include ../Rules
@@ -1125,7 +1132,6 @@ localplt-built-dso := $(addprefix $(common-objpfx),\
rt/librt.so \
dlfcn/libdl.so \
resolv/libresolv.so \
- crypt/libcrypt.so \
)
ifeq ($(build-mathvec),yes)
localplt-built-dso += $(addprefix $(common-objpfx), mathvec/libmvec.so)
@@ -1133,6 +1139,9 @@ endif
ifeq ($(have-thread-library),yes)
localplt-built-dso += $(filter-out %_nonshared.a, $(shared-thread-library))
endif
+ifeq ($(build-crypt),yes)
+localplt-built-dso += $(addprefix $(common-objpfx), crypt/libcrypt.so)
+endif
vpath localplt.data $(+sysdep_dirs)
@@ -1407,6 +1416,7 @@ $(objpfx)tst-linkall-static: \
$(common-objpfx)resolv/libanl.a \
$(static-thread-library)
+ifeq ($(build-crypt),yes)
# If we are using NSS crypto and we have the ability to link statically
# then we include libcrypt.a, otherwise we leave out libcrypt.a and
# link as much as we can into the tst-linkall-static test. This assumes
@@ -1422,6 +1432,7 @@ ifeq (no,$(nss-crypt))
$(objpfx)tst-linkall-static: \
$(common-objpfx)crypt/libcrypt.a
endif
+endif
# The application depends on the DSO, and the DSO loads the plugin.
# The plugin also depends on the DSO. This creates the circular
diff --git a/elf/tst-linkall-static.c b/elf/tst-linkall-static.c
index e8df38f74e6415e7..d0f2592e67888f70 100644
--- a/elf/tst-linkall-static.c
+++ b/elf/tst-linkall-static.c
@@ -18,7 +18,9 @@
#include <math.h>
#include <pthread.h>
-#include <crypt.h>
+#if USE_CRYPT
+# include <crypt.h>
+#endif
#include <resolv.h>
#include <dlfcn.h>
#include <utmp.h>
diff --git a/manual/install.texi b/manual/install.texi
index 43dd8d6b814760c2..c95e4db9ce24c480 100644
--- a/manual/install.texi
+++ b/manual/install.texi
@@ -219,6 +219,17 @@ libnss_nisplus are not built at all.
Use this option to enable libnsl with all depending NSS modules and
header files.
+@item --disable-crypt
+Do not install the passphrase-hashing library @file{libcrypt} or the
+header file @file{crypt.h}. @file{unistd.h} will still declare the
+function @code{crypt}. Using this option does not change the set of
+programs that may need to be linked with @option{-lcrypt}; it only
+means that @theglibc{} will not provide that library.
+
+This option is for hackers and distributions experimenting with
+independently-maintained implementations of libcrypt. It may become
+the default in a future release.
+
@item --disable-experimental-malloc
By default, a per-thread cache is enabled in @code{malloc}. While
this cache can be disabled on a per-application basis using tunables

View File

@ -0,0 +1,29 @@
commit 38cade0c461e58770749d7e8973f85c79532838a
Author: Florian Weimer <fweimer@redhat.com>
Date: Thu Jul 5 19:28:11 2018 +0200
Compile debug/stack_chk_fail_local.c with stack protector
The resulting object file is statically linked into applications, so
it is desirable to have (formal) stack protector coverage there.
diff --git a/debug/Makefile b/debug/Makefile
index c6f6feb0ecf538a2..506cebc3c4ca19ff 100644
--- a/debug/Makefile
+++ b/debug/Makefile
@@ -58,10 +58,13 @@ static-only-routines := warning-nop stack_chk_fail_local
elide-routines.o := stack_chk_fail_local
# Building the stack-protector failure routines with stack protection
-# makes no sense.
+# is not required since we have already failed a stack check and are
+# exiting the process. However, the local aliases which jump to the
+# real routines should still be compiled with stack protection
+# (stack_chk_fail_local.c), so that the statically linked parts of the
+# library have the expected flags.
CFLAGS-stack_chk_fail.c += $(no-stack-protector)
-CFLAGS-stack_chk_fail_local.c += $(no-stack-protector)
CFLAGS-backtrace.c += -fno-omit-frame-pointer -funwind-tables
CFLAGS-sprintf_chk.c += $(libio-mtsafe)

View File

@ -0,0 +1,38 @@
commit 3a885c1f51b18852869a91cf59a1b39da1595c7a
Author: Florian Weimer <fweimer@redhat.com>
Date: Thu Jul 5 22:57:45 2018 +0200
Build csu/elf-init.c and csu/static-reloc.c with stack protector
This does not change generated code (with -fstack-protector-strong), but
is important for formal compiler flags compliance.
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
diff --git a/csu/Makefile b/csu/Makefile
index f3498960f89e3b31..88fc77662ef83479 100644
--- a/csu/Makefile
+++ b/csu/Makefile
@@ -50,6 +50,22 @@ CFLAGS-.o += $(no-stack-protector)
CFLAGS-.op += $(no-stack-protector)
CFLAGS-.os += $(no-stack-protector)
+# Dummy object not actually used for anything. It is linked into
+# crt1.o nevertheless, which in turn is statically linked into
+# applications, so that build flags matter.
+# See <https://sourceware.org/ml/libc-alpha/2018-07/msg00101.html>.
+# NB: Using $(stack-protector) in this way causes a wrong definition
+# STACK_PROTECTOR_LEVEL due to the preceding $(no-stack-protector),
+# but it does not matter for this source file.
+CFLAGS-static-reloc.os += $(stack-protector)
+
+# This file is not actually part of the startup code in the nonshared
+# case and statically linked into applications. See
+# <https://sourceware.org/bugzilla/show_bug.cgi?id=23323>,
+# <https://sourceware.org/ml/libc-alpha/2018-06/msg00717.html>.
+# Also see the note above regarding STACK_PROTECTOR_LEVEL.
+CFLAGS-elf-init.oS += $(stack-protector)
+
ifeq (yes,$(build-shared))
extra-objs += S$(start-installed-name) gmon-start.os
ifneq ($(start-installed-name),$(static-start-installed-name))

40
glibc-python3.patch Normal file
View File

@ -0,0 +1,40 @@
Use python3 for installed executable python scripts.
Fedora is a Python3-only distribution:
https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3
This fixes build failures where builders may strictly enforce only
python3 during a transitional phase.
Author: Carlos O'Donell <carlos@redhat.com>
diff --git a/benchtests/scripts/compare_bench.py b/benchtests/scripts/compare_bench.py
index ea25f778c09bba9d..b53beb3c6e32c3cf 100755
--- a/benchtests/scripts/compare_bench.py
+++ b/benchtests/scripts/compare_bench.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/python3
# Copyright (C) 2015-2018 Free Software Foundation, Inc.
# This file is part of the GNU C Library.
#
diff --git a/benchtests/scripts/import_bench.py b/benchtests/scripts/import_bench.py
index 602b3f954d4801a6..76bf1528a5418748 100644
--- a/benchtests/scripts/import_bench.py
+++ b/benchtests/scripts/import_bench.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/python3
# Copyright (C) 2015-2018 Free Software Foundation, Inc.
# This file is part of the GNU C Library.
#
diff --git a/benchtests/scripts/validate_benchout.py b/benchtests/scripts/validate_benchout.py
index 6147f05bec3a4844..9a5c7947ee4ed7e9 100755
--- a/benchtests/scripts/validate_benchout.py
+++ b/benchtests/scripts/validate_benchout.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/python3
# Copyright (C) 2014-2018 Free Software Foundation, Inc.
# This file is part of the GNU C Library.
#

View File

@ -241,7 +241,7 @@ Date: Sun Mar 1 23:22:45 2015 +0100
extend_alloca_account): Remove.
diff --git a/elf/dl-deps.c b/elf/dl-deps.c
index 35cad364b7dfdf0d..0fae87a0bb976335 100644
index c975fcffd7735f9e..df7fc442ae1a80aa 100644
--- a/elf/dl-deps.c
+++ b/elf/dl-deps.c
@@ -27,6 +27,7 @@
@ -370,7 +370,7 @@ index fd90664f0a17cd6d..c0b83954436ed4c1 100644
# endif /* !_ISOMAC */
diff --git a/nis/nss_nis/nis-initgroups.c b/nis/nss_nis/nis-initgroups.c
index 3784c101f7ee31aa..c872b32e15f55e3d 100644
index a47b4d7ada0fe37b..d6ab289b291861c5 100644
--- a/nis/nss_nis/nis-initgroups.c
+++ b/nis/nss_nis/nis-initgroups.c
@@ -16,7 +16,6 @@
@ -467,7 +467,7 @@ index 3784c101f7ee31aa..c872b32e15f55e3d 100644
return status;
}
diff --git a/nscd/aicache.c b/nscd/aicache.c
index a3de792cc429b546..7064d12a15b3e19d 100644
index 6f7b038021746e22..c2ac71f2b9647caa 100644
--- a/nscd/aicache.c
+++ b/nscd/aicache.c
@@ -28,6 +28,7 @@
@ -636,10 +636,10 @@ index a3de792cc429b546..7064d12a15b3e19d 100644
}
diff --git a/nscd/connections.c b/nscd/connections.c
index cc1ed72077640a8b..2f69800ee5ca83b4 100644
index a2dee8ab0cf903a4..700576e7bcc4fab1 100644
--- a/nscd/connections.c
+++ b/nscd/connections.c
@@ -1324,64 +1324,83 @@ request from '%s' [%ld] not handled due to missing permission"),
@@ -1325,64 +1325,83 @@ request from '%s' [%ld] not handled due to missing permission"),
}
}
@ -761,7 +761,7 @@ index cc1ed72077640a8b..2f69800ee5ca83b4 100644
{
argv[argc++] = cp;
cp = (char *) rawmemchr (cp, '\0') + 1;
@@ -1398,6 +1417,7 @@ cannot change to old UID: %s; disabling paranoia mode"),
@@ -1399,6 +1418,7 @@ cannot change to old UID: %s; disabling paranoia mode"),
strerror (errno));
paranoia = 0;
@ -769,7 +769,7 @@ index cc1ed72077640a8b..2f69800ee5ca83b4 100644
return;
}
@@ -1409,6 +1429,7 @@ cannot change to old GID: %s; disabling paranoia mode"),
@@ -1410,6 +1430,7 @@ cannot change to old GID: %s; disabling paranoia mode"),
ignore_value (setuid (server_uid));
paranoia = 0;
@ -777,7 +777,7 @@ index cc1ed72077640a8b..2f69800ee5ca83b4 100644
return;
}
}
@@ -1426,6 +1447,7 @@ cannot change to old working directory: %s; disabling paranoia mode"),
@@ -1427,6 +1448,7 @@ cannot change to old working directory: %s; disabling paranoia mode"),
ignore_value (setgid (server_gid));
}
paranoia = 0;
@ -785,7 +785,7 @@ index cc1ed72077640a8b..2f69800ee5ca83b4 100644
return;
}
@@ -1474,6 +1496,7 @@ cannot change to old working directory: %s; disabling paranoia mode"),
@@ -1475,6 +1497,7 @@ cannot change to old working directory: %s; disabling paranoia mode"),
dbg_log (_("cannot change current working directory to \"/\": %s"),
strerror (errno));
paranoia = 0;
@ -794,7 +794,7 @@ index cc1ed72077640a8b..2f69800ee5ca83b4 100644
/* Reenable the databases. */
time_t now = time (NULL);
diff --git a/nscd/grpcache.c b/nscd/grpcache.c
index d2ad53509db97bdf..a71036512048dd81 100644
index 0ed8e656b2ae8ff9..3515971ea02d4192 100644
--- a/nscd/grpcache.c
+++ b/nscd/grpcache.c
@@ -16,7 +16,6 @@
@ -889,7 +889,7 @@ index d2ad53509db97bdf..a71036512048dd81 100644
}
diff --git a/nscd/hstcache.c b/nscd/hstcache.c
index 9f6ce979ac333265..d0af99893dd17b9f 100644
index 344a2b3052cc6ee0..95bff9b390495920 100644
--- a/nscd/hstcache.c
+++ b/nscd/hstcache.c
@@ -34,6 +34,7 @@
@ -979,7 +979,7 @@ index 9f6ce979ac333265..d0af99893dd17b9f 100644
}
diff --git a/nscd/pwdcache.c b/nscd/pwdcache.c
index 721f4c617b0bb74a..9349b54df4241ad5 100644
index 4c3ab660211f2b28..3f816ee0b06ae385 100644
--- a/nscd/pwdcache.c
+++ b/nscd/pwdcache.c
@@ -16,7 +16,6 @@
@ -1075,7 +1075,7 @@ index 721f4c617b0bb74a..9349b54df4241ad5 100644
}
diff --git a/nscd/servicescache.c b/nscd/servicescache.c
index 131ba6ddcc1a5f7a..549e9a446816d760 100644
index 49d9d0dece186c1b..53868c97b56af367 100644
--- a/nscd/servicescache.c
+++ b/nscd/servicescache.c
@@ -16,7 +16,6 @@
@ -1169,7 +1169,7 @@ index 131ba6ddcc1a5f7a..549e9a446816d760 100644
}
diff --git a/nss/getent.c b/nss/getent.c
index 8f8c3fe80a2cfea6..5654c5f67c4f118c 100644
index e609e5f9bb62a70f..f8cee703e337c4b2 100644
--- a/nss/getent.c
+++ b/nss/getent.c
@@ -39,6 +39,7 @@
@ -1232,7 +1232,7 @@ index 8f8c3fe80a2cfea6..5654c5f67c4f118c 100644
}
diff --git a/nss/nss_compat/compat-initgroups.c b/nss/nss_compat/compat-initgroups.c
index c1a9301a3b0c3ee0..bae8765afbd109e9 100644
index 74414f4622880b31..540eee863c85dea3 100644
--- a/nss/nss_compat/compat-initgroups.c
+++ b/nss/nss_compat/compat-initgroups.c
@@ -261,7 +261,6 @@ getgrent_next_nss (ent_t *ent, char *buffer, size_t buflen, const char *user,
@ -1303,7 +1303,7 @@ index c1a9301a3b0c3ee0..bae8765afbd109e9 100644
}
diff --git a/nss/nss_files/files-initgroups.c b/nss/nss_files/files-initgroups.c
index 27cd8ece40434f5c..8a88f1b62357d3bd 100644
index 8af0d4d36a400f0e..b441d8345f8a7a24 100644
--- a/nss/nss_files/files-initgroups.c
+++ b/nss/nss_files/files-initgroups.c
@@ -16,7 +16,6 @@
@ -1378,7 +1378,7 @@ index 27cd8ece40434f5c..8a88f1b62357d3bd 100644
fclose (stream);
diff --git a/posix/wordexp.c b/posix/wordexp.c
index e4cfce946013dc78..a751fb32b286aec2 100644
index 8e33ad95b03db16d..ffe4365d6b363e94 100644
--- a/posix/wordexp.c
+++ b/posix/wordexp.c
@@ -17,7 +17,6 @@
@ -1486,7 +1486,7 @@ index e4cfce946013dc78..a751fb32b286aec2 100644
}
return *word ? 0 : WRDE_NOSPACE;
diff --git a/sysdeps/unix/sysv/linux/gethostid.c b/sysdeps/unix/sysv/linux/gethostid.c
index ca0387723873aa8c..9a9346c2189acf7a 100644
index 73c56e57e5aa4422..ec1c8c5bfcd57077 100644
--- a/sysdeps/unix/sysv/linux/gethostid.c
+++ b/sysdeps/unix/sysv/linux/gethostid.c
@@ -63,13 +63,12 @@ sethostid (long int id)
@ -1540,7 +1540,7 @@ index ca0387723873aa8c..9a9346c2189acf7a 100644
bit fiddling. */
return (int32_t) (in.s_addr << 16 | in.s_addr >> 16);
diff --git a/sysdeps/unix/sysv/linux/getlogin_r.c b/sysdeps/unix/sysv/linux/getlogin_r.c
index 45c468f5a13529d8..fea3e18b1bc30ee7 100644
index 7a814ea92f1481bf..6c945afab62442c2 100644
--- a/sysdeps/unix/sysv/linux/getlogin_r.c
+++ b/sysdeps/unix/sysv/linux/getlogin_r.c
@@ -18,6 +18,7 @@
@ -1551,9 +1551,9 @@ index 45c468f5a13529d8..fea3e18b1bc30ee7 100644
#define STATIC static
static int getlogin_r_fd0 (char *name, size_t namesize);
@@ -54,28 +55,19 @@ __getlogin_r_loginuid (char *name, size_t namesize)
endp == uidbuf || *endp != '\0'))
return -1;
@@ -63,28 +64,19 @@ __getlogin_r_loginuid (char *name, size_t namesize)
return ENXIO;
}
- size_t buflen = 1024;
- char *buf = alloca (buflen);
@ -1587,7 +1587,7 @@ index 45c468f5a13529d8..fea3e18b1bc30ee7 100644
}
if (res != 0 || tpwd == NULL)
@@ -95,9 +87,7 @@ __getlogin_r_loginuid (char *name, size_t namesize)
@@ -104,9 +96,7 @@ __getlogin_r_loginuid (char *name, size_t namesize)
memcpy (name, pwd.pw_name, needed);
out:

View File

@ -1,6 +1,6 @@
commit a829b747cf2ce18ba869ea60f67975c484bf2769
Author: Istvan Kurucsai <pistukem@gmail.com>
Date: Fri Jan 12 15:34:13 2018 +0100
commit 5f7b841d3aebdccc2baed27cb4b22ddb08cd7c0c
Author: Florian Weimer <fweimer@redhat.com>
Date: Wed May 23 14:16:18 2018 +0200
Implement allocate_once for atomic initialization with allocation

View File

@ -1,6 +1,6 @@
commit 0e0929705f095c7eb2e11e82aee3bf9e9edd365e
commit 7f9f1ecb710eac4d65bb02785ddf288cac098323
Author: Florian Weimer <fweimer@redhat.com>
Date: Wed Jan 10 20:03:03 2018 +0100
Date: Wed May 23 15:26:19 2018 +0200
Switch IDNA implementation to libidn2 [BZ #19728] [BZ #19729] [BZ #22247]
@ -8,7 +8,7 @@ Date: Wed Jan 10 20:03:03 2018 +0100
CVE-2016-6261, CVE-2016-6263, CVE-2017-14062.
diff --git a/LICENSES b/LICENSES
index 80f7f1487947f578..b29efe01084af28c 100644
index 858076d9d3b8f8fb..0e3a9fe39b26e970 100644
--- a/LICENSES
+++ b/LICENSES
@@ -248,75 +248,6 @@ Public License, version 2.1 or later - see the file COPYING.LIB for details.
@ -88,10 +88,10 @@ index 80f7f1487947f578..b29efe01084af28c 100644
Copyright (C) 1998 WIDE Project.
diff --git a/config.h.in b/config.h.in
index d928e7dd867c68ce..d55a3c3834f91a0d 100644
index b0b7cf26cb4b3aa0..141db213a9046eb4 100644
--- a/config.h.in
+++ b/config.h.in
@@ -119,9 +119,6 @@
@@ -124,9 +124,6 @@
/* Mach/i386 specific: define if the `i386_set_gdt' RPC is available. */
#undef HAVE_I386_SET_GDT
@ -116,7 +116,7 @@ index dcb271d575746c87..0000000000000000
-
-#endif
diff --git a/inet/Makefile b/inet/Makefile
index f63c7e25bad22ecd..6fd20121936048e3 100644
index f63c7e25bad22ecd..0fc478b3ddc59cad 100644
--- a/inet/Makefile
+++ b/inet/Makefile
@@ -45,7 +45,7 @@ routines := htonl htons \
@ -124,10 +124,37 @@ index f63c7e25bad22ecd..6fd20121936048e3 100644
getipv4sourcefilter setipv4sourcefilter \
getsourcefilter setsourcefilter inet6_opt inet6_rth \
- inet6_scopeid_pton deadline
+ inet6_scopeid_pton deadline idna
+ inet6_scopeid_pton deadline idna idna_name_classify
aux := check_pf check_native ifreq
@@ -59,12 +59,20 @@ tests := htontest test_ifindex tst-ntoa tst-ether_aton tst-network \
tests-static += tst-deadline
tests-static-internal := tst-deadline
+# tst-idna_name_classify must be linked statically because it tests
+# internal functionality.
+tests-static += tst-idna_name_classify
+tests-internal += tst-idna_name_classify
+
# tst-inet6_scopeid_pton also needs internal functions but does not
# need to be linked statically.
tests-internal := tst-inet6_scopeid_pton
include ../Rules
+LOCALES := en_US.UTF-8 en_US.ISO-8859-1
+include ../gen-locales.mk
+
ifeq ($(have-thread-library),yes)
CFLAGS-gethstbyad_r.c += -fexceptions
@@ -103,3 +111,5 @@ endif
ifeq ($(build-static-nss),yes)
CFLAGS += -DSTATIC_NSS
endif
+
+$(objpfx)tst-idna_name_classify.out: $(gen-locales)
diff --git a/inet/Versions b/inet/Versions
index 6f663f3648b9926d..9b3661e0467887b8 100644
--- a/inet/Versions
@ -141,7 +168,7 @@ index 6f663f3648b9926d..9b3661e0467887b8 100644
}
}
diff --git a/inet/getnameinfo.c b/inet/getnameinfo.c
index a20d20b7cd52fbf1..6f7dc456494a492f 100644
index a20d20b7cd52fbf1..5d4978e38367446c 100644
--- a/inet/getnameinfo.c
+++ b/inet/getnameinfo.c
@@ -71,10 +71,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@ -166,14 +193,16 @@ index a20d20b7cd52fbf1..6f7dc456494a492f 100644
static char *
nrl_domainname (void)
@@ -285,41 +285,24 @@ gni_host_inet_name (struct scratch_buffer *tmpbuf,
@@ -285,41 +285,28 @@ gni_host_inet_name (struct scratch_buffer *tmpbuf,
/* Terminate the string after the prefix. */
*c = '\0';
-#ifdef HAVE_LIBIDN
/* If requested, convert from the IDN format. */
- if (flags & NI_IDN)
+ bool do_idn = flags & NI_IDN;
+ char *h_name;
if (flags & NI_IDN)
+ if (do_idn)
{
- int idn_flags = 0;
- if (flags & NI_IDN_ALLOW_UNASSIGNED)
@ -199,11 +228,14 @@ index a20d20b7cd52fbf1..6f7dc456494a492f 100644
- free (out);
- }
+ int rc = __idna_from_dns_encoding (h->h_name, &h_name);
+ if (rc != 0)
+ if (rc == EAI_IDN_ENCODE)
+ /* Use the punycode name as a fallback. */
+ do_idn = false;
+ else if (rc != 0)
+ return rc;
}
-#endif
+ else
+ if (!do_idn)
+ h_name = h->h_name;
- size_t len = strlen (h->h_name) + 1;
@ -213,12 +245,12 @@ index a20d20b7cd52fbf1..6f7dc456494a492f 100644
+ memcpy (host, h_name, len);
- memcpy (host, h->h_name, len);
+ if (flags & NI_IDN)
+ if (do_idn)
+ free (h_name);
return 0;
}
@@ -501,10 +484,7 @@ getnameinfo (const struct sockaddr *sa, socklen_t addrlen, char *host,
@@ -501,10 +488,7 @@ getnameinfo (const struct sockaddr *sa, socklen_t addrlen, char *host,
int flags)
{
if (flags & ~(NI_NUMERICHOST|NI_NUMERICSERV|NI_NOFQDN|NI_NAMEREQD|NI_DGRAM
@ -232,10 +264,10 @@ index a20d20b7cd52fbf1..6f7dc456494a492f 100644
if (sa == NULL || addrlen < sizeof (sa_family_t))
diff --git a/inet/idna.c b/inet/idna.c
new file mode 100644
index 0000000000000000..1c48875a6248d820
index 0000000000000000..c561bf2e9e15ad23
--- /dev/null
+++ b/inet/idna.c
@@ -0,0 +1,163 @@
@@ -0,0 +1,182 @@
+/* IDNA functions, forwarding to implementations in libidn2.
+ Copyright (C) 2018 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
@ -350,11 +382,29 @@ index 0000000000000000..1c48875a6248d820
+int
+__idna_to_dns_encoding (const char *name, char **result)
+{
+ switch (__idna_name_classify (name))
+ {
+ case idna_name_ascii:
+ /* Nothing to convert. */
+ return gai_strdup (name, result);
+ case idna_name_nonascii:
+ /* Encoding needed. Handled below. */
+ break;
+ case idna_name_nonascii_backslash:
+ case idna_name_encoding_error:
+ return EAI_IDN_ENCODE;
+ case idna_name_memory_error:
+ return EAI_MEMORY;
+ case idna_name_error:
+ return EAI_SYSTEM;
+ }
+
+ struct functions *functions = get_functions ();
+ if (functions == NULL)
+ /* Forward the domain name to the NSS module unencoded. It may be
+ able to apply its own encoding to find an answer. */
+ return gai_strdup (name, result);
+ /* We report this as an encoding error (assuming that libidn2 is
+ not installed), although the root cause may be a temporary
+ error condition due to resource shortage. */
+ return EAI_IDN_ENCODE;
+ char *ptr = NULL;
+ __typeof__ (functions->lookup_ul) fptr = functions->lookup_ul;
+#ifdef PTR_DEMANGLE
@ -379,7 +429,8 @@ index 0000000000000000..1c48875a6248d820
+{
+ struct functions *functions = get_functions ();
+ if (functions == NULL)
+ /* Simply */
+ /* Simply use the encoded name, assuming that it is not punycode
+ (but even a punycode name would be syntactically valid). */
+ return gai_strdup (name, result);
+ char *ptr = NULL;
+ __typeof__ (functions->to_unicode_lzlz) fptr = functions->to_unicode_lzlz;
@ -399,11 +450,92 @@ index 0000000000000000..1c48875a6248d820
+ return EAI_IDN_ENCODE;
+}
+libc_hidden_def (__idna_from_dns_encoding)
diff --git a/inet/idna_name_classify.c b/inet/idna_name_classify.c
new file mode 100644
index 0000000000000000..3683e1133fea368a
--- /dev/null
+++ b/inet/idna_name_classify.c
@@ -0,0 +1,75 @@
+/* Classify a domain name for IDNA purposes.
+ Copyright (C) 2018 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <errno.h>
+#include <inet/net-internal.h>
+#include <stdbool.h>
+#include <string.h>
+#include <wchar.h>
+
+enum idna_name_classification
+__idna_name_classify (const char *name)
+{
+ mbstate_t mbs;
+ memset (&mbs, 0, sizeof (mbs));
+ const char *p = name;
+ const char *end = p + strlen (p) + 1;
+ bool nonascii = false;
+ bool backslash = false;
+ while (true)
+ {
+ wchar_t wc;
+ size_t result = mbrtowc (&wc, p, end - p, &mbs);
+ if (result == 0)
+ /* NUL terminator was reached. */
+ break;
+ else if (result == (size_t) -2)
+ /* Incomplete trailing multi-byte character. This is an
+ encoding error becaue we received the full name. */
+ return idna_name_encoding_error;
+ else if (result == (size_t) -1)
+ {
+ /* Other error, including EILSEQ. */
+ if (errno == EILSEQ)
+ return idna_name_encoding_error;
+ else if (errno == ENOMEM)
+ return idna_name_memory_error;
+ else
+ return idna_name_error;
+ }
+ else
+ {
+ /* A wide character was decoded. */
+ p += result;
+ if (wc == L'\\')
+ backslash = true;
+ else if (wc > 127)
+ nonascii = true;
+ }
+ }
+
+ if (nonascii)
+ {
+ if (backslash)
+ return idna_name_nonascii_backslash;
+ else
+ return idna_name_nonascii;
+ }
+ else
+ return idna_name_ascii;
+}
diff --git a/inet/net-internal.h b/inet/net-internal.h
index 8a9505cf99c50057..a5cd4e0304e3d117 100644
index 8a9505cf99c50057..0ba6736aef294700 100644
--- a/inet/net-internal.h
+++ b/inet/net-internal.h
@@ -29,6 +29,17 @@ int __inet6_scopeid_pton (const struct in6_addr *address,
@@ -29,6 +29,33 @@ int __inet6_scopeid_pton (const struct in6_addr *address,
libc_hidden_proto (__inet6_scopeid_pton)
@ -417,10 +549,105 @@ index 8a9505cf99c50057..a5cd4e0304e3d117 100644
+int __idna_from_dns_encoding (const char *name, char **result);
+libc_hidden_proto (__idna_from_dns_encoding)
+
+
+/* Return value of __idna_name_classify below. */
+enum idna_name_classification
+{
+ idna_name_ascii, /* No non-ASCII characters. */
+ idna_name_nonascii, /* Non-ASCII characters, no backslash. */
+ idna_name_nonascii_backslash, /* Non-ASCII characters with backslash. */
+ idna_name_encoding_error, /* Decoding error. */
+ idna_name_memory_error, /* Memory allocation failure. */
+ idna_name_error, /* Other error during decoding. Check errno. */
+};
+
+/* Check the specified name for non-ASCII characters and backslashes
+ or encoding errors. */
+enum idna_name_classification __idna_name_classify (const char *name)
+ attribute_hidden;
+
/* Deadline handling for enforcing timeouts.
Code should call __deadline_current_time to obtain the current time
diff --git a/inet/tst-idna_name_classify.c b/inet/tst-idna_name_classify.c
new file mode 100644
index 0000000000000000..c4a2c91329d2b522
--- /dev/null
+++ b/inet/tst-idna_name_classify.c
@@ -0,0 +1,73 @@
+/* Test IDNA name classification.
+ Copyright (C) 2018 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <inet/net-internal.h>
+#include <locale.h>
+#include <stdio.h>
+#include <support/check.h>
+
+static void
+locale_insensitive_tests (void)
+{
+ TEST_COMPARE (__idna_name_classify (""), idna_name_ascii);
+ TEST_COMPARE (__idna_name_classify ("abc"), idna_name_ascii);
+ TEST_COMPARE (__idna_name_classify (".."), idna_name_ascii);
+ TEST_COMPARE (__idna_name_classify ("\001abc\177"), idna_name_ascii);
+ TEST_COMPARE (__idna_name_classify ("\\065bc"), idna_name_ascii);
+}
+
+static int
+do_test (void)
+{
+ puts ("info: C locale tests");
+ locale_insensitive_tests ();
+ TEST_COMPARE (__idna_name_classify ("abc\200def"),
+ idna_name_encoding_error);
+ TEST_COMPARE (__idna_name_classify ("abc\200\\def"),
+ idna_name_encoding_error);
+ TEST_COMPARE (__idna_name_classify ("abc\377def"),
+ idna_name_encoding_error);
+
+ puts ("info: en_US.ISO-8859-1 locale tests");
+ if (setlocale (LC_CTYPE, "en_US.ISO-8859-1") == 0)
+ FAIL_EXIT1 ("setlocale for en_US.ISO-8859-1: %m\n");
+ locale_insensitive_tests ();
+ TEST_COMPARE (__idna_name_classify ("abc\200def"), idna_name_nonascii);
+ TEST_COMPARE (__idna_name_classify ("abc\377def"), idna_name_nonascii);
+ TEST_COMPARE (__idna_name_classify ("abc\\\200def"),
+ idna_name_nonascii_backslash);
+ TEST_COMPARE (__idna_name_classify ("abc\200\\def"),
+ idna_name_nonascii_backslash);
+
+ puts ("info: en_US.UTF-8 locale tests");
+ if (setlocale (LC_CTYPE, "en_US.UTF-8") == 0)
+ FAIL_EXIT1 ("setlocale for en_US.UTF-8: %m\n");
+ locale_insensitive_tests ();
+ TEST_COMPARE (__idna_name_classify ("abc\xc3\x9f""def"), idna_name_nonascii);
+ TEST_COMPARE (__idna_name_classify ("abc\\\xc3\x9f""def"),
+ idna_name_nonascii_backslash);
+ TEST_COMPARE (__idna_name_classify ("abc\xc3\x9f\\def"),
+ idna_name_nonascii_backslash);
+ TEST_COMPARE (__idna_name_classify ("abc\200def"), idna_name_encoding_error);
+ TEST_COMPARE (__idna_name_classify ("abc\xc3""def"), idna_name_encoding_error);
+ TEST_COMPARE (__idna_name_classify ("abc\xc3"), idna_name_encoding_error);
+
+ return 0;
+}
+
+#include <support/test-driver.c>
diff --git a/libidn/Makefile b/libidn/Makefile
deleted file mode 100644
index d61bab5fc4ff512a..0000000000000000
@ -19462,30 +19689,20 @@ index c7e67ca563f87627..0000000000000000
-{
- return stringprep_convert (str, stringprep_locale_charset (), "UTF-8");
-}
diff --git a/manual/contrib.texi b/manual/contrib.texi
index fbf42db31df08e3b..f2a38459856a67ae 100644
--- a/manual/contrib.texi
+++ b/manual/contrib.texi
@@ -176,7 +176,7 @@ software floating-point support and for
his direction as part of @theglibc{} steering committee.
@item
-Simon Josefsson for the @code{libidn} add-on.
+Simon Josefsson for the @code{libidn} add-on (which has been removed again).
@item
Geoffrey Keating for the port to Linux on PowerPC
diff --git a/nscd/gai.c b/nscd/gai.c
index d00a184c46cc0dd7..eb53bd7889ca3fea 100644
index 576fd0045b4abf36..24bdfee1db3791e2 100644
--- a/nscd/gai.c
+++ b/nscd/gai.c
@@ -40,6 +40,3 @@
@@ -42,9 +42,6 @@
/* Support code. */
#include <check_pf.c>
#include <check_native.c>
-#ifdef HAVE_LIBIDN
-# include <libidn/idn-stub.c>
-#endif
/* Some variables normally defined in libc. */
service_user *__nss_hosts_database attribute_hidden;
diff --git a/resolv/Makefile b/resolv/Makefile
index 6e70ae9f6b4a29a9..ea395ac3eb4332e1 100644
--- a/resolv/Makefile
@ -19586,10 +19803,10 @@ index 0000000000000000..590696e3fa3e11b6
+ tst-resolv-ai_idn-nolibidn2 to disable libidn2. */
diff --git a/resolv/tst-resolv-ai_idn-common.c b/resolv/tst-resolv-ai_idn-common.c
new file mode 100644
index 0000000000000000..c3b85f9c84102929
index 0000000000000000..e7c4030e1cb0aca5
--- /dev/null
+++ b/resolv/tst-resolv-ai_idn-common.c
@@ -0,0 +1,440 @@
@@ -0,0 +1,569 @@
+/* Common code for AI_IDN/NI_IDN tests.
+ Copyright (C) 2018 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
@ -19626,14 +19843,37 @@ index 0000000000000000..c3b85f9c84102929
+#if TEST_USE_UTF8
+/* UTF-8 encoding of "nämchen" (German for “namelet”). */
+# define NAEMCHEN "n\xC3\xA4mchen"
+
+/* UTF-8 encoding of "שם" (Hebrew for “name”). */
+# define SHEM "\xD7\xA9\xD7\x9D"
+
+/* UTF-8 encoding of "buße" (German for “penance”). This used to be
+ encoded as "busse" (“busses”) in IDNA2003. */
+# define BUSSE "bu\xC3\x9F""e"
+
+#else
+/* Latin-1 encoding of the same. */
+/* Latin-1 encodings, as far as they are available. */
+
+# define NAEMCHEN "n\xE4mchen"
+# define BUSSE "bu\xDF""e"
+
+#endif
+
+/* IDNA encoding of NAEMCHEN. */
+#define NAEMCHEN_IDNA "xn--nmchen-bua"
+
+/* IDNA encoding of NAEMCHEN "_zwo". */
+#define NAEMCHEN_ZWO_IDNA "xn--nmchen_zwo-q5a"
+
+/* IDNA encoding of SHEM. */
+#define SHEM_IDNA "xn--iebx"
+
+/* IDNA encoding of BUSSE. */
+#define BUSSE_IDNA "xn--bue-6ka"
+
+/* IDNA encoding of "שם1". */
+#define SHEM1_IDNA "xn--1-qic9a"
+
+/* Another IDNA name. */
+#define ANDERES_NAEMCHEN "anderes-" NAEMCHEN
+#define ANDERES_NAEMCHEN_IDNA "xn--anderes-nmchen-eib"
@ -19645,6 +19885,8 @@ index 0000000000000000..c3b85f9c84102929
+ gni_non_idn_cname_to_non_idn_name,
+ gni_non_idn_cname_to_idn_name,
+ gni_idn_name,
+ gni_idn_shem,
+ gni_idn_shem1,
+ gni_idn_cname_to_non_idn_name,
+ gni_idn_cname_to_idn_name,
+ gni_invalid_idn_1,
@ -19694,6 +19936,16 @@ index 0000000000000000..c3b85f9c84102929
+ resolv_response_add_name (b, "xn--nmchen-bua.example");
+ resolv_response_close_record (b);
+ return;
+ case gni_idn_shem:
+ resolv_response_open_record (b, qname, C_IN, T_PTR, 0);
+ resolv_response_add_name (b, SHEM_IDNA ".example");
+ resolv_response_close_record (b);
+ return;
+ case gni_idn_shem1:
+ resolv_response_open_record (b, qname, C_IN, T_PTR, 0);
+ resolv_response_add_name (b, SHEM1_IDNA ".example");
+ resolv_response_close_record (b);
+ return;
+ case gni_idn_cname_to_non_idn_name:
+ resolv_response_open_record (b, qname, C_IN, T_CNAME, 0);
+ next_name = NAEMCHEN_IDNA ".example";
@ -19743,7 +19995,7 @@ index 0000000000000000..c3b85f9c84102929
+ if (!(('0' <= *p && *p <= '9')
+ || ('a' <= *p && *p <= 'z')
+ || ('A' <= *p && *p <= 'Z')
+ || *p == '.' || *p == '-'))
+ || *p == '.' || *p == '-' || *p == '_'))
+ {
+ /* Non-ASCII query. Reply with NXDOMAIN. */
+ struct resolv_response_flags flags = { .rcode = 3 };
@ -19894,6 +20146,65 @@ index 0000000000000000..c3b85f9c84102929
+ "canonname: " NAEMCHEN ".example\n"
+ "address: STREAM/TCP 192.0.2.120 80\n");
+
+#if TEST_USE_UTF8
+ check_ai (SHEM ".example", 0,
+ "error: Name or service not known\n");
+ check_ai (SHEM ".example", AI_IDN,
+ "flags: AI_IDN\n"
+ "address: STREAM/TCP 192.0.2.120 80\n");
+ check_ai (SHEM ".example", AI_IDN | AI_CANONNAME | AI_CANONIDN,
+ "flags: AI_CANONNAME AI_IDN AI_CANONIDN\n"
+ "canonname: " SHEM ".example\n"
+ "address: STREAM/TCP 192.0.2.120 80\n");
+ check_ai (SHEM ".example", AI_IDN | AI_CANONNAME,
+ "flags: AI_CANONNAME AI_IDN\n"
+ "canonname: " SHEM_IDNA ".example\n"
+ "address: STREAM/TCP 192.0.2.120 80\n");
+ check_ai (SHEM "1.example", AI_IDN,
+ "flags: AI_IDN\n"
+ "address: STREAM/TCP 192.0.2.120 80\n");
+ check_ai (SHEM "1.example", AI_IDN | AI_CANONNAME | AI_CANONIDN,
+ "flags: AI_CANONNAME AI_IDN AI_CANONIDN\n"
+ "canonname: " SHEM "1.example\n"
+ "address: STREAM/TCP 192.0.2.120 80\n");
+ check_ai (SHEM "1.example", AI_IDN | AI_CANONNAME,
+ "flags: AI_CANONNAME AI_IDN\n"
+ "canonname: " SHEM1_IDNA ".example\n"
+ "address: STREAM/TCP 192.0.2.120 80\n");
+#endif
+
+ /* Check that non-transitional mode is active. German sharp S
+ should not turn into SS. */
+ check_ai (BUSSE ".example", 0,
+ "error: Name or service not known\n");
+ check_ai (BUSSE ".example", AI_IDN,
+ "flags: AI_IDN\n"
+ "address: STREAM/TCP 192.0.2.120 80\n");
+ check_ai (BUSSE ".example", AI_IDN | AI_CANONNAME,
+ "flags: AI_CANONNAME AI_IDN\n"
+ "canonname: " BUSSE_IDNA ".example\n"
+ "address: STREAM/TCP 192.0.2.120 80\n");
+ check_ai (BUSSE ".example", AI_IDN | AI_CANONNAME | AI_CANONIDN,
+ "flags: AI_CANONNAME AI_IDN AI_CANONIDN\n"
+ "canonname: " BUSSE ".example\n"
+ "address: STREAM/TCP 192.0.2.120 80\n");
+
+ /* Check that Unicode TR 46 mode is active. Underscores should be
+ permitted in IDNA components. */
+ check_ai (NAEMCHEN "_zwo.example", 0,
+ "error: Name or service not known\n");
+ check_ai (NAEMCHEN "_zwo.example", AI_IDN,
+ "flags: AI_IDN\n"
+ "address: STREAM/TCP 192.0.2.120 80\n");
+ check_ai (NAEMCHEN "_zwo.example", AI_IDN | AI_CANONNAME,
+ "flags: AI_CANONNAME AI_IDN\n"
+ "canonname: " NAEMCHEN_ZWO_IDNA ".example\n"
+ "address: STREAM/TCP 192.0.2.120 80\n");
+ check_ai (NAEMCHEN "_zwo.example", AI_IDN | AI_CANONNAME | AI_CANONIDN,
+ "flags: AI_CANONNAME AI_IDN AI_CANONIDN\n"
+ "canonname: " NAEMCHEN "_zwo.example\n"
+ "address: STREAM/TCP 192.0.2.120 80\n");
+
+ /* No CNAME, but already IDN-encoded. */
+ check_ai (NAEMCHEN_IDNA ".example", 0,
+ "address: STREAM/TCP 192.0.2.120 80\n");
@ -19908,6 +20219,32 @@ index 0000000000000000..c3b85f9c84102929
+ "flags: AI_CANONNAME AI_IDN AI_CANONIDN\n"
+ "canonname: " NAEMCHEN ".example\n"
+ "address: STREAM/TCP 192.0.2.120 80\n");
+ check_ai (SHEM_IDNA ".example", 0,
+ "address: STREAM/TCP 192.0.2.120 80\n");
+ check_ai (SHEM_IDNA ".example", AI_IDN,
+ "flags: AI_IDN\n"
+ "address: STREAM/TCP 192.0.2.120 80\n");
+ check_ai (SHEM_IDNA ".example", AI_IDN | AI_CANONNAME,
+ "flags: AI_CANONNAME AI_IDN\n"
+ "canonname: " SHEM_IDNA ".example\n"
+ "address: STREAM/TCP 192.0.2.120 80\n");
+#if TEST_USE_UTF8
+ check_ai (SHEM_IDNA ".example", AI_IDN | AI_CANONNAME | AI_CANONIDN,
+ "flags: AI_CANONNAME AI_IDN AI_CANONIDN\n"
+ "canonname: " SHEM ".example\n"
+ "address: STREAM/TCP 192.0.2.120 80\n");
+#else
+ check_ai (SHEM_IDNA ".example", AI_IDN | AI_CANONNAME | AI_CANONIDN,
+ "flags: AI_CANONNAME AI_IDN AI_CANONIDN\n"
+ "canonname: " SHEM_IDNA ".example\n"
+ "address: STREAM/TCP 192.0.2.120 80\n");
+#endif
+
+ /* Invalid IDNA canonical name is returned as-is. */
+ check_ai ("xn---.example", AI_CANONNAME | AI_CANONIDN,
+ "flags: AI_CANONNAME AI_CANONIDN\n"
+ "canonname: xn---.example\n"
+ "address: STREAM/TCP 192.0.2.120 80\n");
+
+ /* Non-IDN CNAME. */
+ check_ai ("with.cname.example", 0,
@ -19955,16 +20292,16 @@ index 0000000000000000..c3b85f9c84102929
+ "error: Name or service not known\n");
+ check_ai ("With.idn-cname." NAEMCHEN ".example", AI_IDN,
+ "flags: AI_IDN\n"
+ "address: STREAM/TCP 192.0.2.87 80\n");
+ "address: STREAM/TCP 192.0.2.119 80\n");
+ check_ai ("With.idn-cname." NAEMCHEN ".example", AI_IDN | AI_CANONNAME,
+ "flags: AI_CANONNAME AI_IDN\n"
+ "canonname: " ANDERES_NAEMCHEN_IDNA ".example\n"
+ "address: STREAM/TCP 192.0.2.87 80\n");
+ "address: STREAM/TCP 192.0.2.119 80\n");
+ check_ai ("With.idn-cname." NAEMCHEN ".example",
+ AI_IDN | AI_CANONNAME | AI_CANONIDN,
+ "flags: AI_CANONNAME AI_IDN AI_CANONIDN\n"
+ "canonname: " ANDERES_NAEMCHEN ".example\n"
+ "address: STREAM/TCP 192.0.2.87 80\n");
+ "address: STREAM/TCP 192.0.2.119 80\n");
+
+ /* Non-IDN to IDN CNAME chain. */
+ check_ai ("both.cname.idn-cname.example", 0,
@ -20017,6 +20354,15 @@ index 0000000000000000..c3b85f9c84102929
+
+ gni_test (gni_idn_name, 0, NAEMCHEN_IDNA ".example");
+ gni_test (gni_idn_name, NI_IDN, NAEMCHEN ".example");
+ gni_test (gni_idn_shem, 0, SHEM_IDNA ".example");
+ gni_test (gni_idn_shem1, 0, SHEM1_IDNA ".example");
+#if TEST_USE_UTF8
+ gni_test (gni_idn_shem, NI_IDN, SHEM ".example");
+ gni_test (gni_idn_shem1, NI_IDN, SHEM "1.example");
+#else
+ gni_test (gni_idn_shem, NI_IDN, SHEM_IDNA ".example");
+ gni_test (gni_idn_shem1, NI_IDN, SHEM1_IDNA ".example");
+#endif
+
+ gni_test (gni_idn_cname_to_non_idn_name, 0, "non-idn-name.example");
+ gni_test (gni_idn_cname_to_non_idn_name, NI_IDN, "non-idn-name.example");
@ -20024,11 +20370,11 @@ index 0000000000000000..c3b85f9c84102929
+ gni_test (gni_idn_cname_to_idn_name, 0, ANDERES_NAEMCHEN_IDNA ".example");
+ gni_test (gni_idn_cname_to_idn_name, NI_IDN, ANDERES_NAEMCHEN ".example");
+
+ /* Test encoding errors. */
+ /* Test encoding errors. */
+ gni_test (gni_invalid_idn_1, 0, "xn---.example");
+ gni_test (gni_invalid_idn_1, NI_IDN, NULL);
+ gni_test (gni_invalid_idn_1, NI_IDN, "xn---.example");
+ gni_test (gni_invalid_idn_2, 0, "xn--x.example");
+ gni_test (gni_invalid_idn_2, NI_IDN, NULL);
+ gni_test (gni_invalid_idn_2, NI_IDN, "xn--x.example");
+}
diff --git a/resolv/tst-resolv-ai_idn-latin1.c b/resolv/tst-resolv-ai_idn-latin1.c
new file mode 100644
@ -20088,10 +20434,10 @@ index 0000000000000000..fb60f3261e0ff95e
+#include <support/test-driver.c>
diff --git a/resolv/tst-resolv-ai_idn-nolibidn2.c b/resolv/tst-resolv-ai_idn-nolibidn2.c
new file mode 100644
index 0000000000000000..8f30da8741ef0d7d
index 0000000000000000..7203c23f3cf00b1b
--- /dev/null
+++ b/resolv/tst-resolv-ai_idn-nolibidn2.c
@@ -0,0 +1,148 @@
@@ -0,0 +1,151 @@
+/* Test getaddrinfo and getnameinfo without usable libidn2.
+ Copyright (C) 2018 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
@ -20131,12 +20477,15 @@ index 0000000000000000..8f30da8741ef0d7d
+ "canonname: non-idn.example\n"
+ "address: STREAM/TCP 192.0.2.110 80\n");
+
+ /* This gets passed over the network to the server, so it will
+ result in an NXDOMAIN error. */
+ check_ai (NAEMCHEN ".example", 0,
+ "error: Name or service not known\n");
+ /* Due to missing libidn2, this fails inside getaddrinfo. */
+ check_ai (NAEMCHEN ".example", AI_IDN,
+ "error: Name or service not known\n");
+ "error: Parameter string not correctly encoded\n");
+ check_ai (NAEMCHEN ".example", AI_IDN | AI_CANONNAME | AI_CANONIDN,
+ "error: Name or service not known\n");
+ "error: Parameter string not correctly encoded\n");
+
+ /* Non-IDN CNAME. */
+ check_ai ("with.cname.example", 0,
@ -20205,7 +20554,7 @@ index 0000000000000000..8f30da8741ef0d7d
+ gni_test (gni_idn_cname_to_idn_name, flags,
+ ANDERES_NAEMCHEN_IDNA ".example");
+
+ /* Test encoding errors. */
+ /* Test encoding errors. */
+ gni_test (gni_invalid_idn_1, flags, "xn---.example");
+ gni_test (gni_invalid_idn_2, flags, "xn--x.example");
+}
@ -20295,21 +20644,8 @@ index 0000000000000000..df8203b14a156f2e
+}
+
+#include <support/test-driver.c>
diff --git a/support/support_format_addrinfo.c b/support/support_format_addrinfo.c
index c5e00e516a8279f7..56dc7a9e0cbe92f3 100644
--- a/support/support_format_addrinfo.c
+++ b/support/support_format_addrinfo.c
@@ -67,8 +67,6 @@ format_ai_flags (FILE *out, struct addrinfo *ai)
FLAG (AI_ADDRCONFIG);
FLAG (AI_IDN);
FLAG (AI_CANONIDN);
- FLAG (AI_IDN_ALLOW_UNASSIGNED);
- FLAG (AI_IDN_USE_STD3_ASCII_RULES);
FLAG (AI_NUMERICSERV);
#undef FLAG
int remaining = ai->ai_flags & ~flags_printed;
diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c
index c15f76e547e29533..593a718266557cf5 100644
index c15f76e547e29533..e21e0f5f33dd422c 100644
--- a/sysdeps/posix/getaddrinfo.c
+++ b/sysdeps/posix/getaddrinfo.c
@@ -85,9 +85,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@ -20359,7 +20695,7 @@ index c15f76e547e29533..593a718266557cf5 100644
+ char *out;
+ result = __idna_to_dns_encoding (name, &out);
+ if (result != 0)
+ return result;
+ return -result;
+ name = out;
+ malloc_name = true;
}
@ -20367,43 +20703,51 @@ index c15f76e547e29533..593a718266557cf5 100644
if (__inet_aton (name, (struct in_addr *) at->addr) != 0)
{
@@ -1028,40 +1008,17 @@ gaih_inet (const char *name, const struct gaih_service *service,
@@ -1028,40 +1008,24 @@ gaih_inet (const char *name, const struct gaih_service *service,
the passed in string. */
canon = orig_name;
-#ifdef HAVE_LIBIDN
if (req->ai_flags & AI_CANONIDN)
- if (req->ai_flags & AI_CANONIDN)
+ bool do_idn = req->ai_flags & AI_CANONIDN;
+ if (do_idn)
{
- int idn_flags = 0;
- if (req->ai_flags & AI_IDN_ALLOW_UNASSIGNED)
- idn_flags |= IDNA_ALLOW_UNASSIGNED;
- if (req->ai_flags & AI_IDN_USE_STD3_ASCII_RULES)
- idn_flags |= IDNA_USE_STD3_ASCII_RULES;
-
char *out;
- int rc = __idna_to_unicode_lzlz (canon, &out, idn_flags);
- if (rc != IDNA_SUCCESS)
- {
+ int rc = __idna_from_dns_encoding (canon, &out);
+ if (rc == 0)
+ canon = out;
+ else if (rc == EAI_IDN_ENCODE)
+ /* Use the punycode name as a fallback. */
+ do_idn = false;
+ else
{
- if (rc == IDNA_MALLOC_ERROR)
- result = -EAI_MEMORY;
- else if (rc == IDNA_DLOPEN_ERROR)
- result = -EAI_SYSTEM;
- else
- result = -EAI_IDN_ENCODE;
- goto free_and_return;
- }
+ result = -rc;
goto free_and_return;
}
- /* In case the output string is the same as the input
- string no new string has been allocated and we
- make a copy. */
- if (out == canon)
- goto make_copy;
+ result = __idna_from_dns_encoding (canon, &out);
+ if (result != 0)
+ goto free_and_return;
canon = out;
- canon = out;
}
else
- else
-#endif
+ if (!do_idn)
{
-#ifdef HAVE_LIBIDN
- make_copy:
@ -20411,7 +20755,7 @@ index c15f76e547e29533..593a718266557cf5 100644
if (canonbuf != NULL)
/* We already allocated the string using malloc, but
the buffer is now owned by canon. */
@@ -2222,10 +2179,7 @@ getaddrinfo (const char *name, const char *service,
@@ -2222,10 +2186,7 @@ getaddrinfo (const char *name, const char *service,
if (hints->ai_flags
& ~(AI_PASSIVE|AI_CANONNAME|AI_NUMERICHOST|AI_ADDRCONFIG|AI_V4MAPPED

33
glibc-rh1592270.patch Normal file
View File

@ -0,0 +1,33 @@
commit 14beef7575099f6373f9a45b4656f1e3675f7372
Author: Florian Weimer <fweimer@redhat.com>
Date: Thu Jun 14 22:34:09 2018 +0200
localedata: Make IBM273 compatible with ISO-8859-1 [BZ #23290]
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
diff --git a/iconvdata/ibm273.c b/iconvdata/ibm273.c
index c303cf306db56d81..132c06f0eb629f6e 100644
--- a/iconvdata/ibm273.c
+++ b/iconvdata/ibm273.c
@@ -23,6 +23,6 @@
#define TABLES <ibm273.h>
#define CHARSET_NAME "IBM273//"
-#define HAS_HOLES 1 /* Not all 256 character are defined. */
+#define HAS_HOLES 0
#include <8bit-gap.c>
diff --git a/localedata/charmaps/IBM273 b/localedata/charmaps/IBM273
index c3f70e2a6f7c4595..4401101b5013c706 100644
--- a/localedata/charmaps/IBM273
+++ b/localedata/charmaps/IBM273
@@ -194,7 +194,7 @@ CHARMAP
<U00BE> /xb9 VULGAR FRACTION THREE QUARTERS
<U00AC> /xba NOT SIGN
<U007C> /xbb VERTICAL LINE
-<U203E> /xbc OVERLINE
+<U00AF> /xbc MACRON
<U00A8> /xbd DIAERESIS
<U00B4> /xbe ACUTE ACCENT
<U00D7> /xbf MULTIPLICATION SIGN

22
glibc-rh1615608.patch Normal file
View File

@ -0,0 +1,22 @@
Please see the following bug for a complete summary:
https://bugzilla.redhat.com/show_bug.cgi?id=1615608
Index: glibc-2.28/manual/startup.texi
===================================================================
--- glibc-2.28.orig/manual/startup.texi
+++ glibc-2.28/manual/startup.texi
@@ -1005,14 +1005,6 @@ This function actually terminates the pr
intercept this signal; see @ref{Signal Handling}.
@end deftypefun
-@c Put in by rms. Don't remove.
-@cartouche
-@strong{Future Change Warning:} Proposed Federal censorship regulations
-may prohibit us from giving you information about the possibility of
-calling this function. We would be required to say that this is not an
-acceptable way of terminating a program.
-@end cartouche
-
@node Termination Internals
@subsection Termination Internals

View File

@ -0,0 +1,139 @@
Author: Florian Weimer <fweimer@redhat.com>
Date: Wed Jul 4 11:34:36 2018 +0200
Add --with-nonshared-cflags option to configure
Submitted upstream:
https://sourceware.org/ml/libc-alpha/2018-07/msg00071.html
diff --git a/INSTALL b/INSTALL
index 0a22aa7d01e6e87b..0f80d9d615db6d42 100644
--- a/INSTALL
+++ b/INSTALL
@@ -90,6 +90,15 @@ if 'CFLAGS' is specified it must enable optimization. For example:
library will still be usable, but functionality may be lost--for
example, you can't build a shared libc with old binutils.
+'--with-nonshared-cflags=CFLAGS'
+ Use additional compiler flags CFLAGS to build the parts of the
+ library which are always statically linked into applications and
+ libraries even with shared linking (that is, the object files
+ contained in 'lib*_nonshared.a' libraries). The build process will
+ automatically use the appropriate flags, but this option can be
+ used to set additional flags required for building applications and
+ libraries, to match local policy.
+
'--disable-shared'
Don't build shared libraries even if it is possible. Not all
systems support shared libraries; you need ELF support and
diff --git a/Makeconfig b/Makeconfig
index 608ffe648c80c724..b0b27f0113ac18b8 100644
--- a/Makeconfig
+++ b/Makeconfig
@@ -1038,7 +1038,7 @@ object-suffixes-for-libc += .oS
# Must build the routines as PIC, though, because they can end up in (users')
# shared objects. We don't want to use CFLAGS-os because users may, for
# example, make that processor-specific.
-CFLAGS-.oS = $(CFLAGS-.o) $(PIC-ccflag)
+CFLAGS-.oS = $(CFLAGS-.o) $(PIC-ccflag) $(extra-nonshared-cflags)
CPPFLAGS-.oS = $(CPPFLAGS-.o) -DPIC -DLIBC_NONSHARED=1
libtype.oS = lib%_nonshared.a
endif
diff --git a/config.make.in b/config.make.in
index d9891b2cd8ec3fbf..a6fe48d31f4d2725 100644
--- a/config.make.in
+++ b/config.make.in
@@ -110,6 +110,7 @@ BUILD_CC = @BUILD_CC@
CFLAGS = @CFLAGS@
CPPFLAGS-config = @CPPFLAGS@
CPPUNDEFS = @CPPUNDEFS@
+extra-nonshared-cflags = @extra_nonshared_cflags@
ASFLAGS-config = @ASFLAGS_config@
AR = @AR@
NM = @NM@
diff --git a/configure b/configure
index ef1830221522b7a5..fec0efff8216addd 100755
--- a/configure
+++ b/configure
@@ -684,6 +684,7 @@ force_install
bindnow
hardcoded_path_in_tests
enable_timezone_tools
+extra_nonshared_cflags
use_default_link
sysheaders
ac_ct_CXX
@@ -762,6 +763,7 @@ with_binutils
with_selinux
with_headers
with_default_link
+with_nonshared_cflags
enable_sanity_checks
enable_shared
enable_profile
@@ -1479,6 +1481,8 @@ Optional Packages:
--with-headers=PATH location of system headers to use (for example
/usr/src/linux/include) [default=compiler default]
--with-default-link do not use explicit linker scripts
+ --with-nonshared-cflags=FLAGS
+ build nonshared libraries with additional FLAGS
--with-cpu=CPU select code for CPU variant
Some influential environment variables:
@@ -3336,6 +3340,16 @@ else
fi
+
+# Check whether --with-nonshared-cflags was given.
+if test "${with_nonshared_cflags+set}" = set; then :
+ withval=$with_nonshared_cflags; extra_nonshared_cflags=$withval
+else
+ extra_nonshared_cflags=
+fi
+
+
+
# Check whether --enable-sanity-checks was given.
if test "${enable_sanity_checks+set}" = set; then :
enableval=$enable_sanity_checks; enable_sanity=$enableval
diff --git a/configure.ac b/configure.ac
index dc517017f588626a..154185d70de38928 100644
--- a/configure.ac
+++ b/configure.ac
@@ -154,6 +154,14 @@ AC_ARG_WITH([default-link],
[use_default_link=$withval],
[use_default_link=default])
+dnl Additional build flags injection.
+AC_ARG_WITH([nonshared-cflags],
+ AC_HELP_STRING([--with-nonshared-cflags=FLAGS],
+ [build nonshared libraries with additional FLAGS]),
+ [extra_nonshared_cflags=$withval],
+ [extra_nonshared_cflags=])
+AC_SUBST(extra_nonshared_cflags)
+
AC_ARG_ENABLE([sanity-checks],
AC_HELP_STRING([--disable-sanity-checks],
[really do not use threads (should not be used except in special situations) @<:@default=yes@:>@]),
diff --git a/manual/install.texi b/manual/install.texi
index 422da1447eb4dc68..eaf0cd09e7501b96 100644
--- a/manual/install.texi
+++ b/manual/install.texi
@@ -117,6 +117,15 @@ problem and suppress these constructs, so that the library will still be
usable, but functionality may be lost---for example, you can't build a
shared libc with old binutils.
+@item --with-nonshared-cflags=@var{cflags}
+Use additional compiler flags @var{cflags} to build the parts of the
+library which are always statically linked into applications and
+libraries even with shared linking (that is, the object files contained
+in @file{lib*_nonshared.a} libraries). The build process will
+automatically use the appropriate flags, but this option can be used to
+set additional flags required for building applications and libraries,
+to match local policy.
+
@c disable static doesn't work currently
@c @item --disable-static
@c Don't build static libraries. Static libraries aren't that useful these

View File

@ -1,6 +1,6 @@
%define glibcsrcdir glibc-2.27-5-g56170e064e
%define glibcsrcdir glibc-2.27-78-g2b47bb9cba
%define glibcversion 2.27
%define glibcrelease 5%{?dist}
%define glibcrelease 34%{?dist}
# Pre-release tarballs are pulled in from git using a command that is
# effectively:
#
@ -95,6 +95,13 @@
# Only some architectures have static PIE support.
%define pie_arches %{ix86} x86_64
# Build the POWER9 runtime on POWER, but only for downstream.
%ifarch ppc64le
%define buildpower9 0%{?rhel} > 0
%else
%define buildpower9 0
%endif
##############################################################################
# Any architecture/kernel combination that supports running 32-bit and 64-bit
# code in userspace is considered a biarch arch.
@ -112,12 +119,32 @@ Summary: The GNU libc libraries
Name: glibc
Version: %{glibcversion}
Release: %{glibcrelease}
# GPLv2+ is used in a bunch of programs, LGPLv2+ is used for libraries.
# Things that are linked directly into dynamically linked programs
# and shared libraries (e.g. crt files, lib*_nonshared.a) have an additional
# exception which allows linking it into any kind of programs or shared
# libraries without restrictions.
License: LGPLv2+ and LGPLv2+ with exceptions and GPLv2+
# In general, GPLv2+ is used by programs, LGPLv2+ is used for
# libraries.
#
# LGPLv2+ with exceptions is used for things that are linked directly
# into dynamically linked programs and shared libraries (e.g. crt
# files, lib*_nonshared.a). Historically, this exception also applies
# to parts of libio.
#
# GPLv2+ with exceptions is used for parts of the Arm unwinder.
#
# GFDL is used for the documentation.
#
# Some other licenses are used in various places (BSD, Inner-Net,
# ISC, Public Domain).
#
# HSRL and FSFAP are only used in test cases, which currently do not
# ship in binary RPMs, so they are not listed here. MIT is used for
# scripts/install-sh, which does not ship, either.
#
# GPLv3+ is used by manual/texinfo.tex, which we do not use.
#
# LGPLv2 is used in one place (time/timespec_get.c, by mistake), but
# it is not actually compiled, so it does not matter for libraries.
License: LGPLv2+ and LGPLv2+ with exceptions and GPLv2+ and GPLv2+ with exceptions and BSD and Inner-Net and ISC and Public Domain and GFDL
URL: http://www.gnu.org/software/glibc/
Source0: %{?glibc_release_url}%{glibcsrcdir}.tar.gz
Source1: build-locale-archive.c
@ -187,6 +214,9 @@ Patch0053: glibc-cs-path.patch
# Add C.UTF-8 locale into /usr/lib/locale/
Patch0059: glibc-c-utf8-locale.patch
# Bug 1615608 - Remove abort() warning in manual.
Patch0060: glibc-rh1615608.patch
##############################################################################
#
# Patches from upstream
@ -219,7 +249,32 @@ Patch2031: glibc-rh1070416.patch
Patch2037: glibc-rh1315108.patch
Patch2040: glibc-rh1452750-allocate_once.patch
Patch2041: glibc-rh1452750-libidn2.patch
Patch2042: glibc-deprecate_libcrypt.patch
Patch2100: glibc-disable-crypt-0.patch
Patch2101: glibc-disable-crypt-1.patch
Patch2102: glibc-disable-crypt-2.patch
Patch2103: glibc-disable-crypt-3.patch
Patch2104: glibc-disable-crypt-4.patch
Patch2043: glibc-collation-cldr-1.patch
Patch2044: glibc-collation-cldr-2.patch
Patch2045: glibc-collation-cldr-3.patch
Patch2046: glibc-collation-cldr-4.patch
Patch2047: glibc-collation-cldr-5.patch
Patch2048: glibc-collation-cldr-6.patch
Patch2049: glibc-collation-cldr-7.patch
Patch2050: glibc-collation-cldr-8.patch
Patch2051: glibc-collation-cldr-9.patch
Patch2052: glibc-collation-cldr-10.patch
Patch2053: glibc-collation-cldr-11.patch
Patch2054: glibc-collation-cldr-12.patch
Patch2055: glibc-collation-cldr-13.patch
Patch2056: glibc-collation-cldr-14.patch
Patch2057: glibc-collation-cldr-15.patch
Patch2058: glibc-python3.patch
Patch2059: glibc-rh1592270.patch
Patch2060: glibc-with-nonshared-cflags.patch
Patch2061: glibc-asflags.patch
Patch2062: glibc-extra-stackprot-1.patch
Patch2063: glibc-extra-stackprot-2.patch
##############################################################################
# End of glibc patches.
@ -235,6 +290,9 @@ Provides: ldconfig
Provides: rtld(GNU_HASH)
Requires: glibc-common = %{version}-%{release}
# Various components (regex, glob) have been imported from gnulib.
Provides: bundled(gnulib)
Requires(pre): basesystem
# This is for building auxiliary programs like memusage, nscd
@ -298,8 +356,13 @@ BuildRequires: make >= 4.0
# The intl subsystem generates a parser using bison.
BuildRequires: bison >= 2.7
%if 0%{?rhel} > 0
# binutils 2.30-17 is needed for --generate-missing-build-notes.
BuildRequires: binutils >= 2.30-17
%else
# binutils 2.29 is needed for static PIE support in i386/x86_64.
BuildRequires: binutils >= 2.29
%endif
# Earlier releases have broken support for IRELATIVE relocations
Conflicts: prelink < 0.4.2
@ -746,7 +809,33 @@ microbenchmark tests on the system.
%patch2037 -p1
%patch2040 -p1
%patch2041 -p1
%patch2042 -p1
%patch2100 -p1
%patch2101 -p1
%patch2102 -p1
%patch2103 -p1
%patch2104 -p1
%patch2043 -p1
%patch2044 -p1
%patch2045 -p1
%patch2046 -p1
%patch2047 -p1
%patch2048 -p1
%patch2049 -p1
%patch2050 -p1
%patch2051 -p1
%patch2052 -p1
%patch2053 -p1
%patch2054 -p1
%patch2055 -p1
%patch2056 -p1
%patch2057 -p1
%patch2058 -p1
%patch2059 -p1
%patch2060 -p1
%patch2061 -p1
%patch2062 -p1
%patch2063 -p1
%patch0060 -p1
##############################################################################
# %%prep - Additional prep required...
@ -791,30 +880,34 @@ df
GCC=gcc
GXX=g++
# True if the compiler flag in the first argument is listed in
# redhat-rpm-config.
rpm_has_compiler_flag ()
# Part of rpm_inherit_flags. Is overridden below.
rpm_append_flag ()
{
echo " $RPM_OPT_FLAGS $RPM_LD_FLAGS " | grep -q -F " $1 "
BuildFlags="$BuildFlags $*"
}
# Propagates the listed flags to BuildFlags if supplied by redhat-rpm-config.
# Propagates the listed flags to rpm_append_flag if supplied by
# redhat-rpm-config.
BuildFlags="-O2 -g"
rpm_inherit_flags ()
{
local reference=" $* "
local flag
for flag in "$@" ; do
if rpm_has_compiler_flag "$flag" ; then
BuildFlags="$BuildFlags $flag"
for flag in $RPM_OPT_FLAGS $RPM_LD_FLAGS ; do
if echo "$reference" | grep -q -F " $flag " ; then
rpm_append_flag "$flag"
fi
done
}
# Propgate select compiler flags from redhat-rpm-config. These flags
# are target-dependent, so we use only those which are specified in
# redhat-rpm-config. We do not replicate the -march=/-mtune=
# selection here because these match the defaults compiled into GCC.
# We keep the -m32/-m32/-m64 flags to support multilib builds.
# redhat-rpm-config. We keep the -m32/-m32/-m64 flags to support
# multilib builds.
#
# Note: For building alternative run-times, care is required to avoid
# overriding the architecture flags which go into CC/CXX. The flags
# below are passed in CFLAGS.
rpm_inherit_flags \
"-fasynchronous-unwind-tables" \
@ -823,6 +916,38 @@ rpm_inherit_flags \
"-m31" \
"-m32" \
"-m64" \
"-mstackrealign" \
%if 0%{?rhel} > 0
"-Wp,-D_GLIBCXX_ASSERTIONS" \
"-fcf-protection" \
"-march=i686" \
"-march=x86-64" \
"-march=z13" \
"-march=z14" \
"-march=zEC12" \
"-mfpmath=sse" \
"-msse2" \
"-mtune=generic" \
"-mtune=z13" \
"-mtune=z14" \
"-mtune=zEC12" \
"-specs=/usr/lib/rpm/redhat/redhat-annobin-cc1" \
%endif
# Propagate additional build flags to BuildFlagsNonshared. This is
# very special because some of these files are part of the startup
# code. We essentially hope that these flags have little effect
# there, and only specify the, for consistency, so that annobin
# records the expected compiler flags.
BuildFlagsNonshared=
rpm_append_flag () {
BuildFlagsNonshared="$BuildFlagsNonshared $*"
}
rpm_inherit_flags \
"-Wp,-D_FORTIFY_SOURCE=2" \
# Special flags which need to be passed to make. Currently none.
%define glibc_make_flags %{nil}
##############################################################################
# %%build - Generic options.
@ -849,6 +974,7 @@ build()
../configure CC="$GCC" CXX="$GXX" CFLAGS="$BuildFlags $*" \
--prefix=%{_prefix} \
--with-headers=%{_prefix}/include $EnableKernel \
--with-nonshared-cflags="$BuildFlagsNonshared" \
--enable-bind-now \
--build=%{target} \
--enable-stack-protector=strong \
@ -868,16 +994,14 @@ build()
%if %{with bootstrap}
--without-selinux \
%endif
--disable-nss-crypt ||
--disable-crypt ||
{ cat config.log; false; }
make %{?_smp_mflags} -O -r
make %{?_smp_mflags} -O -r %{glibc_make_flags}
popd
}
##############################################################################
# Build glibc for the default set of options.
##############################################################################
# Default set of options.
build
##############################################################################
@ -922,6 +1046,15 @@ build
)
%endif
%if %{buildpower9}
(
GCC="$GCC -mcpu=power9 -mtune=power9"
GXX="$GXX -mcpu=power9 -mtune=power9"
core_with_options="--with-cpu=power9"
build power9
)
%endif
##############################################################################
# Install glibc...
##############################################################################
@ -959,7 +1092,9 @@ make -j1 install_root=$RPM_BUILD_ROOT install -C build-%{target}
# locales.
%ifnarch %{auxarches}
pushd build-%{target}
make %{?_smp_mflags} -O install_root=$RPM_BUILD_ROOT \
# Do not use a parallel make here because the hardlink optimization in
# localedef is not fully reproducible when running concurrently.
make install_root=$RPM_BUILD_ROOT \
install-locales -C ../localedata objdir=`pwd`
popd
%endif
@ -1011,6 +1146,12 @@ install_different()
done
}
%if %{buildpower9}
pushd build-%{target}-power9
install_different "$RPM_BUILD_ROOT/%{_lib}" power9 ..
popd
%endif
##############################################################################
# Install the power6 build files.
##############################################################################
@ -1691,17 +1832,8 @@ run_tests () {
export TIMEOUTFACTOR=16
parent=$$
echo ====================TESTING=========================
##############################################################################
# - Test the default runtime.
# - Power 620 / 970 ISA for 64-bit POWER BE.
# - POWER8 for 64-bit POWER LE.
# - ??? for 64-bit x86_64
# - ??? for 32-bit x86
# - ??? for 64-bit AArch64
# - ??? for 32-bit ARM
# - zEC12 for 64-bit s390x
# - ??? for 32-bit s390
##############################################################################
# Default libraries.
pushd build-%{target}
run_tests
popd
@ -1739,6 +1871,13 @@ run_tests
popd
%endif
%if %{buildpower9}
echo ====================TESTING -mcpu=power9=============
pushd build-%{target}-power9
run_tests
popd
%endif
echo ====================TESTING END=====================
PLTCMD='/^Relocation section .*\(\.rela\?\.plt\|\.rela\.IA_64\.pltoff\)/,/^$/p'
echo ====================PLT RELOCS LD.SO================
@ -1846,6 +1985,9 @@ fi
%if %{buildpower8}
%dir /%{_lib}/power8
%endif
%if %{buildpower9}
%dir /%{_lib}/power9
%endif
%ifarch s390x
/lib/ld64.so.1
%endif
@ -1933,8 +2075,149 @@ fi
%endif
%changelog
* Mon Nov 26 2018 Florian Weimer <fweimer@redhat.com> - 2.27-34
- Do not use parallel make for building locales (#1652228)
* Thu Aug 30 2018 Florian Weimer <fweimer@redhat.com> - 2.27-33
- Revert glibc_make_flags setting which is not needed in Fedora 28 (#1600034)
* Wed Aug 29 2018 Florian Weimer <fweimer@redhat.com> - 2.27-32
- Auto-sync with upstream branch release/2.27/master,
commit 2b47bb9cba048e778a7d832f284feccb14a40483:
- nptl: Fix waiters-after-spinning case in pthread_cond_broadcast (#1622669)
- x86: Correct index_cpu_LZCNT (swbz#23456)
- x86: Populate COMMON_CPUID_INDEX_80000001 for Intel CPUs (swbz#23459)
* Mon Aug 13 2018 Carlos O'Donell <carlos@redhat.com> - 2.27-31
- Remove abort() warning in manual (#1615608)
* Wed Jul 11 2018 Florian Weimer <fweimer@redhat.com> - 2.27-30
- Auto-sync with upstream branch release/2.27/master,
commit 68c1bf80978594388157c62fd2edd467d4e8dfb2:
- regexec: Fix off-by-one bug in weight comparison (#1582229)
- es_BO locale: Change LC_PAPER to en_US (swbz#22996)
- conform/conformtest.pl: Escape literal braces in regular expressions
* Wed Jul 11 2018 Florian Weimer <fweimer@redhat.com> - 2.27-29
- Add POWER9 multilib (downstream only)
* Wed Jul 11 2018 Florian Weimer <fweimer@redhat.com> - 2.27-28
- Work around valgrind issue on i686 (#1600034)
* Fri Jul 6 2018 Florian Weimer <fweimer@redhat.com> - 2.27-27
- Build additional files with stack protector
* Fri Jul 6 2018 Florian Weimer <fweimer@redhat.com> - 2.27-26
- Enable build flags inheritance for nonshared flags
* Fri Jul 6 2018 Florian Weimer <fweimer@redhat.com> - 2.27-25
- Inherit further build flags (downstream only)
* Wed Jul 4 2018 Florian Weimer <fweimer@redhat.com> - 2.27-24
- Add annobin annotations to assembler code (downstream only) (#1548438)
* Wed Jul 4 2018 Florian Weimer <fweimer@redhat.com> - 2.27-23
- Enable -D_FORTIFY_SOURCE=2 for nonshared code
* Wed Jul 04 2018 Florian Weimer <fweimer@redhat.com> - 2.27-22
- Auto-sync with upstream branch release/2.27/master,
commit 5fab7fe1dc9cab9a46cf5c8840aa9b7ea3a26296:
- math: Set 387 and SSE2 rounding mode for tgamma on i386 (swbz#23253)
* Wed Jul 4 2018 Florian Weimer <fweimer@redhat.com> - 2.27-21
- Switch to upstream implementation of --disable-crypt (#1566464)
* Tue Jul 03 2018 Florian Weimer <fweimer@redhat.com> - 2.27-20
- Auto-sync with upstream branch release/2.27/master,
commit 7602b9e48c30c146d52df91dd83e518b8d0d343b:
- math: Fix parameter type in C++ version of iseqsig (swbz#23171)
- Use _STRUCT_TIMESPEC as guard in <bits/types/struct_timespec.h> (swbz#23349)
- getifaddrs: Don't return ifa entries with NULL names (swbz#21812)
- libio: Disable vtable validation in case of interposition (swbz#23313)
- stdio-common/tst-printf.c: Remove part under a non-free license (swbz#23363)
* Wed Jun 20 2018 Florian Weimer <fweimer@redhat.com> - 2.27-19
- Modernise nsswitch.conf defaults (#1581809)
* Mon Jun 18 2018 Florian Weimer <fweimer@redhat.com> - 2.27-18
- iconv: Make IBM273 equivalent to ISO-8859-1 (#1592270)
* Mon Jun 18 2018 Florian Weimer <fweimer@redhat.com> - 2.27-17
- Align build flags inheritance with master (downstream only)
* Mon Jun 18 2018 Florian Weimer <fweimer@redhat.com> - 2.27-16
- Auto-sync with upstream branch release/2.27/master,
commit 80c83e91140d429c73f79092fdb75eed0fb71da0:
- libio: Avoid _allocate_buffer, _free_buffer function pointers (swbz#23236)
- posix: Fix posix_spawnp to not execute invalid binaries in non compat mode
(swbz#23264)
- elf: Improve DST handling (swbz#23102, swbz#21942, swbz#18018, swbz#23259)
* Thu May 24 2018 Florian Weimer <fweimer@redhat.com> - 2.27-15
- Rebuild to add back .symtab section in ld.so (#1570246)
- Switch to upstream version of libidn2 removal (#1452750)
- Auto-sync with upstream branch release/2.27/master,
commit 50df56ca86a281c8fd99a8100aac75539813788d:
- CVE-2018-11237: Buffer overflow in mempcpy for Xeon Phi (#1581275)
* Thu May 17 2018 Florian Weimer <fweimer@redhat.com> - 2.27-14
- Do not run telinit u on upgrades (#1579225)
* Tue May 15 2018 Florian Weimer <fweimer@redhat.com> - 2.27-13
- Auto-sync with upstream branch release/2.27/master,
commit 0cd4a5e87f6885a2f15fe8e7eb7378d010cdb606:
- sunrpc: Remove stray exports (#1577210)
- gd_GB: Fix typo in abbreviated "May" (swbz#23152)
- CVE-2018-11236: realpath: Fix path length overflow (#1581270, swbz#22786)
- elf: Fix stack overflow with huge PT_NOTE segment (swbz#20419)
- resolv: Fully initialize struct mmsghdr in send_dg (swbz#23037)
- manual: Various fixes to the mbstouwcs example, and mbrtowc update
- getlogin_r: return early when linux sentinel value is set
- resolv: Fix crash in resolver on memory allocation failure (swbz#23005)
- Fix signed integer overflow in random_r (swbz#17343)
- RISC-V: fix struct kernel_sigaction to match the kernel version (swbz#23069)
* Fri May 11 2018 Florian Weimer <fweimer@redhat.com> - 2.27-12
- Unconditionally build downstream with -mstackrealign for now
* Fri May 11 2018 Florian Weimer <fweimer@redhat.com> - 2.27-11
- Inherit compiler flags in the original order
* Fri May 11 2018 Florian Weimer <fweimer@redhat.com> - 2.27-10
- Inherit the -mstackrealign flag if it is set
* Fri May 11 2018 Florian Weimer <fweimer@redhat.com> - 2.27-9
- Use /usr/bin/python3 for benchmarks scripts (#1577223)
* Thu Mar 29 2018 Florian Weimer <fweimer@redhat.com> - 2.27-8
- Auto-sync with upstream branch release/2.27/master,
commit 39071a55392d2d2e0b75fb19f2b48d661c4cc682.
* Thu Mar 29 2018 Florian Weimer <fweimer@redhat.com> - 2.27-7
- Enable annobin on Red Hat Enterprise Linux
- Auto-sync with upstream branch release/2.27/master,
commit 55ad82e45c313454de657931898e974a7a036cad:
- CVE-2017-18269: i386: Fix memmove issue (swbz#22644)
- RISC-V: fmax/fmin: Handle signalling NaNs correctly (swbz#22884)
- RISC-V: Do not initialize $gp in TLS macros
- cs_CZ locale: Add alternative month names (swbz#22963)
- Greek (el_CY, el_GR) locales: Introduce ab_alt_mon (swbz#22937)
- lt_LT locale: Update abbreviated month names (swbz#22932)
- ca_ES locale: Update LC_TIME (swbz#22848)
- i386: Fix i386 sigaction sa_restorer initialization (swbz#21269)
- Fix multiple definitions of __nss_*_database (swbz#22918)
- Fix netgroup cache keys (swbz#22342)
- linux/powerpc: sync sys/ptrace.h with Linux 4.15 (swbz#22433, swbz#22807)
- powerpc: Undefine Linux ptrace macros that conflict with __ptrace_request
- Add missing “reorder-end” in LC_COLLATE of et_EE (swbz#22517)
- linux/aarch64: sync sys/ptrace.h with Linux 4.15 (swbz#22433)
- [RISC-V] Fix parsing flags in ELF64 files (swbz#22827)
* Fri Mar 2 2018 Florian Weimer <fweimer@redhat.com> - 2.27-6
- Collation update and sync with CLDR (#1551009)
* Wed Feb 28 2018 Florian Weimer <fweimer@redhat.com> - 2.27-5
- Inherit as many flags as possible from redhat-rpm-config
- Inherit as many flags as possible from redhat-rpm-config (#1550914)
* Mon Feb 19 2018 Richard W.M. Jones <rjones@redhat.com> - 2.27-4
- riscv64: Add symlink from /usr/lib64/lp64d -> /usr/lib64 for ABI compat.

View File

@ -136,43 +136,6 @@ main (void)
"--nostdlib", iconv_dir);
}
/* Check if telinit is available and either SysVInit fifo,
or upstart telinit. */
if (access ("/sbin/telinit", X_OK)
|| ((!!access ("/dev/initctl", F_OK))
^ !access ("/sbin/initctl", X_OK)))
_exit (0);
/* Check if we are not inside of some chroot, because we'd just
timeout and leave /etc/initrunlvl.
On more modern systems this test is not sufficient to detect
if we're in a chroot. */
if (readlink ("/proc/1/exe", initpath, 256) <= 0 ||
readlink ("/proc/1/root", initpath, 256) <= 0)
_exit (0);
/* Here's another well known way to detect chroot, at least on an
ext and xfs filesystems and assuming nothing mounted on the chroot's
root. */
if (stat ("/", &statbuf) != 0
|| (statbuf.st_ino != 2
&& statbuf.st_ino != 128))
_exit (0);
if (check_elf ("/proc/1/exe"))
verbose_exec (116, "/sbin/telinit", "/sbin/telinit", "u");
/* Check if we can safely condrestart sshd. */
if (access ("/sbin/service", X_OK) == 0
&& access ("/usr/sbin/sshd", X_OK) == 0
&& access ("/etc/rc.d/init.d/sshd", X_OK) == 0
&& access ("/bin/bash", X_OK) == 0)
{
if (check_elf ("/usr/sbin/sshd"))
verbose_exec (-121, "/sbin/service", "/sbin/service", "sshd", "condrestart");
}
_exit(0);
}

View File

@ -15,37 +15,31 @@
# nisplus Use NIS+ (NIS version 3)
# nis Use NIS (NIS version 2), also called YP
# dns Use DNS (Domain Name Service)
# files Use the local files
# db Use the local database (.db) files
# compat Use NIS on compat mode
# hesiod Use Hesiod for user lookups
# files Use the local files in /etc
# db Use the pre-processed /var/db files
# compat Use /etc files plus *_compat pseudo-databases
# hesiod Use Hesiod (DNS) for user lookups
# sss Use sssd (System Security Services Daemon)
# [NOTFOUND=return] Stop searching if not found so far
#
# 'sssd' performs its own 'files'-based caching, so it should
# generally come before 'files'.
# To use db, put the "db" in front of "files" for entries you want to be
# looked up first in the databases
# To use 'db', install the nss_db package, and put the 'db' in front
# of 'files' for entries you want to be looked up first in the
# databases, like this:
#
# Example:
#passwd: db files nisplus nis
#shadow: db files nisplus nis
#group: db files nisplus nis
# passwd: db files
# shadow: db files
# group: db files
passwd: sss files
shadow: files sss
group: sss files
#hosts: db files nisplus nis dns
hosts: files dns
hosts: files dns myhostname
# Example - obey only what nisplus tells us...
#services: nisplus [NOTFOUND=return] files
#networks: nisplus [NOTFOUND=return] files
#protocols: nisplus [NOTFOUND=return] files
#rpc: nisplus [NOTFOUND=return] files
#ethers: nisplus [NOTFOUND=return] files
#netmasks: nisplus [NOTFOUND=return] files
bootparams: nisplus [NOTFOUND=return] files
bootparams: files
ethers: files
netmasks: files
@ -54,9 +48,9 @@ protocols: files
rpc: files
services: files sss
netgroup: nisplus sss
netgroup: sss
publickey: nisplus
publickey: files
automount: files nisplus
aliases: files nisplus
automount: files sss
aliases: files

View File

@ -1 +1 @@
SHA512 (glibc-2.27-5-g56170e064e.tar.gz) = de3d8d1c847a7042e813dd56d4b2aa3950fc391579fc40ab4e9a7ebea279593e01326752c11484a78edb4734ea6408872580fa2147bb4ea8abc0bf1c9f08c7df
SHA512 (glibc-2.27-78-g2b47bb9cba.tar.gz) = c467caf370d44db67a35f4ce053754ec02905b29aa998b3a699482a83246dc3daf52822d88af459131a94a55793686af9c69865e34490e8adc9491d156cda0f5