From d20c1f89655635746b79692384e0eb66ef38cc507a5476ade5f3636b002c7c8c Mon Sep 17 00:00:00 2001 From: Bernhard Voelker Date: Tue, 12 May 2015 09:12:54 +0000 Subject: [PATCH 1/5] - Fix memory handling error with case insensitive sort using UTF-8 (boo#928749): * coreutils-i18n.patch: Allocate more memory as the upper form of some multi-byte characters may be 1 byte wider. OBS-URL: https://build.opensuse.org/package/show/Base:System/coreutils?expand=0&rev=255 --- coreutils-i18n.patch | 4 ++-- coreutils-testsuite.changes | 8 ++++++++ coreutils.changes | 8 ++++++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/coreutils-i18n.patch b/coreutils-i18n.patch index 024e47e..fbdf9ba 100644 --- a/coreutils-i18n.patch +++ b/coreutils-i18n.patch @@ -3261,8 +3261,8 @@ Index: src/sort.c + + if (ignore || translate) + { -+ char *copy_a = (char *) xmalloc (lena + 1 + lenb + 1); -+ char *copy_b = copy_a + lena + 1; ++ char *copy_a = (char *) xmalloc((lena + lenb) * MB_CUR_MAX + 2); ++ char *copy_b = copy_a + (lena * MB_CUR_MAX) + 1; + size_t new_len_a, new_len_b; + size_t i, j; + diff --git a/coreutils-testsuite.changes b/coreutils-testsuite.changes index ff84b8d..ce627b4 100644 --- a/coreutils-testsuite.changes +++ b/coreutils-testsuite.changes @@ -1,3 +1,11 @@ +------------------------------------------------------------------- +Tue May 12 08:56:13 UTC 2015 - mail@bernhard-voelker.de + +- Fix memory handling error with case insensitive sort using UTF-8 + (boo#928749): + * coreutils-i18n.patch: Allocate more memory as the upper form of + some multi-byte characters may be 1 byte wider. + ------------------------------------------------------------------- Tue Apr 7 18:18:31 UTC 2015 - crrodriguez@opensuse.org diff --git a/coreutils.changes b/coreutils.changes index ff84b8d..ce627b4 100644 --- a/coreutils.changes +++ b/coreutils.changes @@ -1,3 +1,11 @@ +------------------------------------------------------------------- +Tue May 12 08:56:13 UTC 2015 - mail@bernhard-voelker.de + +- Fix memory handling error with case insensitive sort using UTF-8 + (boo#928749): + * coreutils-i18n.patch: Allocate more memory as the upper form of + some multi-byte characters may be 1 byte wider. + ------------------------------------------------------------------- Tue Apr 7 18:18:31 UTC 2015 - crrodriguez@opensuse.org From feef8ae1a8a8eb316c12856c6fcd397f3ba89b3d30508f35687d820d4cd1ada3 Mon Sep 17 00:00:00 2001 From: Bernhard Voelker Date: Tue, 12 May 2015 09:56:39 +0000 Subject: [PATCH 2/5] - Download keyring file from Savannah; prefer HTTPS over FTP for remote sources. OBS-URL: https://build.opensuse.org/package/show/Base:System/coreutils?expand=0&rev=256 --- coreutils-testsuite.changes | 6 ++++++ coreutils-testsuite.spec | 6 +++--- coreutils.changes | 6 ++++++ coreutils.keyring | Bin 9441 -> 36110 bytes coreutils.spec | 6 +++--- 5 files changed, 18 insertions(+), 6 deletions(-) diff --git a/coreutils-testsuite.changes b/coreutils-testsuite.changes index ce627b4..017af61 100644 --- a/coreutils-testsuite.changes +++ b/coreutils-testsuite.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Tue May 12 09:32:53 UTC 2015 - mail@bernhard-voelker.de + +- Download keyring file from Savannah; prefer HTTPS over FTP + for remote sources. + ------------------------------------------------------------------- Tue May 12 08:56:13 UTC 2015 - mail@bernhard-voelker.de diff --git a/coreutils-testsuite.spec b/coreutils-testsuite.spec index 81f5409..4a45425 100644 --- a/coreutils-testsuite.spec +++ b/coreutils-testsuite.spec @@ -82,9 +82,9 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-build # For upgrading you now just need to increase the version, remove the old # tarballs, then run osc service localrun download_files, osc addremove, # osc vc and osc ci and you are done. -Source0: ftp://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.xz -Source1: ftp://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.xz.sig -Source2: %{name}.keyring +Source0: https://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.xz +Source1: https://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.xz.sig +Source2: https://savannah.gnu.org/project/memberlist-gpgkeys.php?group=%{name}&download=1&file=./%{name}.keyring %else # In "coreutils-testsuite", we use the version controlled file from "coreutils". # otherwise that file would be downloaded twice during the above mentioned diff --git a/coreutils.changes b/coreutils.changes index ce627b4..017af61 100644 --- a/coreutils.changes +++ b/coreutils.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Tue May 12 09:32:53 UTC 2015 - mail@bernhard-voelker.de + +- Download keyring file from Savannah; prefer HTTPS over FTP + for remote sources. + ------------------------------------------------------------------- Tue May 12 08:56:13 UTC 2015 - mail@bernhard-voelker.de diff --git a/coreutils.keyring b/coreutils.keyring index 089f7c7fda6fdaf69c49c5aac8f70a91fd2c9803bea2b7c43e2522894f77e761..89c5be0a635cacd4e215bc522d3b8dbaa61d3a5fa836e5963a60f87e760dd990 100644 GIT binary patch literal 36110 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

wcUz(h4-tv_5!W-k-I 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 Date: Tue, 12 May 2015 15:42:22 +0000 Subject: [PATCH 3/5] s/MB_CUR_MAX/MB_LEN_MAX/, and add a test case OBS-URL: https://build.opensuse.org/package/show/Base:System/coreutils?expand=0&rev=257 --- coreutils-i18n.patch | 51 +++++++++++++++++-- ...s-tests-shorten-extreme-factor-tests.patch | 2 +- coreutils-testsuite.changes | 8 +-- coreutils.changes | 8 +-- 4 files changed, 58 insertions(+), 11 deletions(-) diff --git a/coreutils-i18n.patch b/coreutils-i18n.patch index fbdf9ba..f8d7070 100644 --- a/coreutils-i18n.patch +++ b/coreutils-i18n.patch @@ -7,7 +7,8 @@ src/sort.c | 743 +++++++++++++++++++++++++++++++++++++++++--- src/unexpand.c | 228 +++++++++++++ src/uniq.c | 265 +++++++++++++++ - tests/local.mk | 1 + tests/i18n/sort.sh | 29 + + tests/local.mk | 2 tests/misc/cut.pl | 7 tests/misc/expand.pl | 40 ++ tests/misc/fold.pl | 50 ++ @@ -18,7 +19,7 @@ tests/misc/unexpand.pl | 39 ++ tests/misc/uniq.pl | 55 +++ tests/pr/pr-tests.pl | 49 ++ - 20 files changed, 3194 insertions(+), 180 deletions(-) + 21 files changed, 3224 insertions(+), 180 deletions(-) Index: lib/linebuffer.h =================================================================== @@ -3261,8 +3262,8 @@ Index: src/sort.c + + if (ignore || translate) + { -+ char *copy_a = (char *) xmalloc((lena + lenb) * MB_CUR_MAX + 2); -+ char *copy_b = copy_a + (lena * MB_CUR_MAX) + 1; ++ char *copy_a = (char *) xmalloc((lena + lenb) * MB_LEN_MAX + 2); ++ char *copy_b = copy_a + (lena * MB_LEN_MAX) + 1; + size_t new_len_a, new_len_b; + size_t i, j; + @@ -4112,6 +4113,14 @@ Index: tests/local.mk tests/misc/sort-merge.pl \ tests/misc/sort-merge-fdlimit.sh \ tests/misc/sort-month.sh \ +@@ -516,6 +517,7 @@ all_tests = \ + tests/du/threshold.sh \ + tests/du/trailing-slash.sh \ + tests/du/two-args.sh \ ++ tests/i18n/sort.sh \ + tests/id/gnu-zero-uids.sh \ + tests/id/no-context.sh \ + tests/id/context.sh \ Index: tests/misc/cut.pl =================================================================== --- tests/misc/cut.pl.orig @@ -4718,3 +4727,37 @@ Index: tests/pr/pr-tests.pl my $save_temps = $ENV{DEBUG}; my $verbose = $ENV{VERBOSE}; +Index: tests/i18n/sort.sh +=================================================================== +--- /dev/null ++++ tests/i18n/sort.sh +@@ -0,0 +1,29 @@ ++#!/bin/sh ++# Verify sort's multi-byte support. ++ ++. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src ++print_ver_ sort ++ ++export LC_ALL=en_US.UTF-8 ++locale -k LC_CTYPE | grep -q "charmap.*UTF-8" \ ++ || skip_ "No UTF-8 locale available" ++ ++# Enable heap consistency checkng on older systems ++export MALLOC_CHECK_=2 ++ ++ ++# check buffer overflow issue due to ++# expanding multi-byte representation due to case conversion ++# https://bugzilla.suse.com/show_bug.cgi?id=928749 ++cat < exp ++. ++ɑ ++EOF ++cat < out || fail=1 ++. ++ɑ ++EOF ++compare exp out || { fail=1; cat out; } ++ ++ ++Exit $fail diff --git a/coreutils-tests-shorten-extreme-factor-tests.patch b/coreutils-tests-shorten-extreme-factor-tests.patch index 8e15c09..aaef1b1 100644 --- a/coreutils-tests-shorten-extreme-factor-tests.patch +++ b/coreutils-tests-shorten-extreme-factor-tests.patch @@ -16,7 +16,7 @@ Index: tests/local.mk =================================================================== --- tests/local.mk.orig +++ tests/local.mk -@@ -661,14 +661,9 @@ all_tests = \ +@@ -662,14 +662,9 @@ all_tests = \ # See tests/factor/create-test.sh. tf = tests/factor factor_tests = \ diff --git a/coreutils-testsuite.changes b/coreutils-testsuite.changes index 017af61..a30bb11 100644 --- a/coreutils-testsuite.changes +++ b/coreutils-testsuite.changes @@ -8,9 +8,11 @@ Tue May 12 09:32:53 UTC 2015 - mail@bernhard-voelker.de Tue May 12 08:56:13 UTC 2015 - mail@bernhard-voelker.de - Fix memory handling error with case insensitive sort using UTF-8 - (boo#928749): - * coreutils-i18n.patch: Allocate more memory as the upper form of - some multi-byte characters may be 1 byte wider. + (boo#928749): coreutils-i18n.patch + src/sort.c (keycompare_mb): Ensure the buffer is big enough + to handle anything output from wctomb(). Theoretically any + input char could be converted to multiple output chars, + and so we need to multiply the storage by MB_LEN_MAX. ------------------------------------------------------------------- Tue Apr 7 18:18:31 UTC 2015 - crrodriguez@opensuse.org diff --git a/coreutils.changes b/coreutils.changes index 017af61..a30bb11 100644 --- a/coreutils.changes +++ b/coreutils.changes @@ -8,9 +8,11 @@ Tue May 12 09:32:53 UTC 2015 - mail@bernhard-voelker.de Tue May 12 08:56:13 UTC 2015 - mail@bernhard-voelker.de - Fix memory handling error with case insensitive sort using UTF-8 - (boo#928749): - * coreutils-i18n.patch: Allocate more memory as the upper form of - some multi-byte characters may be 1 byte wider. + (boo#928749): coreutils-i18n.patch + src/sort.c (keycompare_mb): Ensure the buffer is big enough + to handle anything output from wctomb(). Theoretically any + input char could be converted to multiple output chars, + and so we need to multiply the storage by MB_LEN_MAX. ------------------------------------------------------------------- Tue Apr 7 18:18:31 UTC 2015 - crrodriguez@opensuse.org From 9553e98f8b4dd471f7b06c5dad1418852137a2c389bf65452915fbc9ee32cad5 Mon Sep 17 00:00:00 2001 From: Bernhard Voelker Date: Wed, 13 May 2015 09:42:40 +0000 Subject: [PATCH 4/5] use MB_CUR_MAX again, as that is the better (and smaller) choice OBS-URL: https://build.opensuse.org/package/show/Base:System/coreutils?expand=0&rev=258 --- coreutils-i18n.patch | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/coreutils-i18n.patch b/coreutils-i18n.patch index f8d7070..e2cd380 100644 --- a/coreutils-i18n.patch +++ b/coreutils-i18n.patch @@ -3262,8 +3262,8 @@ Index: src/sort.c + + if (ignore || translate) + { -+ char *copy_a = (char *) xmalloc((lena + lenb) * MB_LEN_MAX + 2); -+ char *copy_b = copy_a + (lena * MB_LEN_MAX) + 1; ++ char *copy_a = (char *) xmalloc((lena + lenb) * MB_CUR_MAX + 2); ++ char *copy_b = copy_a + (lena * MB_CUR_MAX) + 1; + size_t new_len_a, new_len_b; + size_t i, j; + From ec1de2b3387d5a41dc28f3983c1ab2475afd4d81166ef3ac53cee95c1a950c18 Mon Sep 17 00:00:00 2001 From: Bernhard Voelker Date: Wed, 13 May 2015 09:44:48 +0000 Subject: [PATCH 5/5] fix changes wrt/ the previous s/MB_LEN_MAX/MB_CUR_MAX/. OBS-URL: https://build.opensuse.org/package/show/Base:System/coreutils?expand=0&rev=259 --- coreutils-testsuite.changes | 2 +- coreutils.changes | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/coreutils-testsuite.changes b/coreutils-testsuite.changes index a30bb11..40b13cb 100644 --- a/coreutils-testsuite.changes +++ b/coreutils-testsuite.changes @@ -12,7 +12,7 @@ Tue May 12 08:56:13 UTC 2015 - mail@bernhard-voelker.de src/sort.c (keycompare_mb): Ensure the buffer is big enough to handle anything output from wctomb(). Theoretically any input char could be converted to multiple output chars, - and so we need to multiply the storage by MB_LEN_MAX. + and so we need to multiply the storage by MB_CUR_MAX. ------------------------------------------------------------------- Tue Apr 7 18:18:31 UTC 2015 - crrodriguez@opensuse.org diff --git a/coreutils.changes b/coreutils.changes index a30bb11..40b13cb 100644 --- a/coreutils.changes +++ b/coreutils.changes @@ -12,7 +12,7 @@ Tue May 12 08:56:13 UTC 2015 - mail@bernhard-voelker.de src/sort.c (keycompare_mb): Ensure the buffer is big enough to handle anything output from wctomb(). Theoretically any input char could be converted to multiple output chars, - and so we need to multiply the storage by MB_LEN_MAX. + and so we need to multiply the storage by MB_CUR_MAX. ------------------------------------------------------------------- Tue Apr 7 18:18:31 UTC 2015 - crrodriguez@opensuse.org