From 864192556ef7c28439de856568ff8168ca1469d0515e01a1ede36015272bc7bd Mon Sep 17 00:00:00 2001 From: Andreas Schwab Date: Mon, 31 Aug 2020 12:11:25 +0000 Subject: [PATCH] Accepting request 830782 from home:berny:branches:Base:System - gnulib-test-avoid-FP-perror-strerror.patch: Add patch to avoid false-positive error in gnulib tests 'test-perror2' and 'test-strerror_r', visible on armv7l. - grep.spec: Reference the patch. OBS-URL: https://build.opensuse.org/request/show/830782 OBS-URL: https://build.opensuse.org/package/show/Base:System/grep?expand=0&rev=102 --- gnulib-test-avoid-FP-perror-strerror.patch | 101 +++++++++++++++++++++ grep.changes | 8 ++ grep.spec | 2 + 3 files changed, 111 insertions(+) create mode 100644 gnulib-test-avoid-FP-perror-strerror.patch diff --git a/gnulib-test-avoid-FP-perror-strerror.patch b/gnulib-test-avoid-FP-perror-strerror.patch new file mode 100644 index 0000000..482a45d --- /dev/null +++ b/gnulib-test-avoid-FP-perror-strerror.patch @@ -0,0 +1,101 @@ +Avoid false-positive error in gnulib tests 'test-perror2' and 'test-strerror_r'. + +On openSUSE OBS, the above gnulib tests fail on armv7l. + +Corresponding report on the gnulib mailing list: + + https://lists.gnu.org/r/bug-gnulib/2020-08/msg00220.html + + From: Florian Weimer + Date: Thu, 27 Aug 2020 09:41:34 +0200 + Subject: Use-after-free in test-perror2, test-strerror_r + + The problem is visible with glibc 2.32 under valgrind: + + ==20== Invalid read of size 1 + ==20== at 0x483DAB4: strcmp (vg_replace_strmem.c:847) + ==20== by 0x109414: main (test-perror2.c:84) + ==20== Address 0x4a1a3d0 is 0 bytes inside a block of size 17 free'd + ==20== at 0x483A9F5: free (vg_replace_malloc.c:538) + ==20== by 0x48E2134: strerror_l (in /usr/lib64/libc-2.32.so) + ==20== by 0x109328: main (test-perror2.c:72) + ==20== Block was alloc'd at + ==20== at 0x4839809: malloc (vg_replace_malloc.c:307) + ==20== by 0x48CA03F: __vasprintf_internal (in /usr/lib64/libc-2.32.so) + ==20== by 0x48A46F9: asprintf (in /usr/lib64/libc-2.32.so) + ==20== by 0x48E2184: strerror_l (in /usr/lib64/libc-2.32.so) + ==20== by 0x1092E2: main (test-perror2.c:67) + ==20== + ==20== Invalid read of size 1 + ==20== at 0x483DAC8: strcmp (vg_replace_strmem.c:847) + ==20== by 0x109414: main (test-perror2.c:84) + ==20== Address 0x4a1a3d1 is 1 bytes inside a block of size 17 free'd + ==20== at 0x483A9F5: free (vg_replace_malloc.c:538) + ==20== by 0x48E2134: strerror_l (in /usr/lib64/libc-2.32.so) + ==20== by 0x109328: main (test-perror2.c:72) + ==20== Block was alloc'd at + ==20== at 0x4839809: malloc (vg_replace_malloc.c:307) + ==20== by 0x48CA03F: __vasprintf_internal (in /usr/lib64/libc-2.32.so) + ==20== by 0x48A46F9: asprintf (in /usr/lib64/libc-2.32.so) + ==20== by 0x48E2184: strerror_l (in /usr/lib64/libc-2.32.so) + ==20== by 0x1092E2: main (test-perror2.c:67) + + I think it's the test that's invalid. + + This was reported as an actual grep test failure (without valgrind) on + 32-bit Arm, where glibc malloc happens to return a different buffer + address for the internal allocation (so that msg3 != msg4). + + test-strerror_r has the same issue. + + Thanks, + Florian + +Upstream patch: + + https://git.sv.gnu.org/cgit/gnulib.git/commit/?id=175e0bc72808 + + From 175e0bc72808d564074c4adcc72aeadb74adfcc6 Mon Sep 17 00:00:00 2001 + From: Paul Eggert + Date: Thu, 27 Aug 2020 17:52:58 -0700 + Subject: [PATCH] perror, strerror_r: remove unportable tests + + Problem reported by Florian Weimer in: + https://lists.gnu.org/r/bug-gnulib/2020-08/msg00220.html + * tests/test-perror2.c (main): + * tests/test-strerror_r.c (main): Omit unportable tests. + +This downstream patch is identical to upstream one modulo the ChangeLog entry. +--- + gnulib-tests/test-perror2.c | 3 --- + gnulib-tests/test-strerror_r.c | 3 --- + 2 files changed, 6 deletions(-) + +Index: gnulib-tests/test-perror2.c +=================================================================== +--- gnulib-tests/test-perror2.c.orig ++++ gnulib-tests/test-perror2.c +@@ -79,9 +79,6 @@ main (void) + errno = -5; + perror (""); + ASSERT (!ferror (stderr)); +- ASSERT (msg1 == msg2 || msg1 == msg4 || STREQ (msg1, str1)); +- ASSERT (msg2 == msg4 || STREQ (msg2, str2)); +- ASSERT (msg3 == msg4 || STREQ (msg3, str3)); + ASSERT (STREQ (msg4, str4)); + + free (str1); +Index: gnulib-tests/test-strerror_r.c +=================================================================== +--- gnulib-tests/test-strerror_r.c.orig ++++ gnulib-tests/test-strerror_r.c +@@ -165,9 +165,6 @@ main (void) + + strerror_r (EACCES, buf, sizeof buf); + strerror_r (-5, buf, sizeof buf); +- ASSERT (msg1 == msg2 || msg1 == msg4 || STREQ (msg1, str1)); +- ASSERT (msg2 == msg4 || STREQ (msg2, str2)); +- ASSERT (msg3 == msg4 || STREQ (msg3, str3)); + ASSERT (STREQ (msg4, str4)); + + free (str1); diff --git a/grep.changes b/grep.changes index 2ad1606..0c224bb 100644 --- a/grep.changes +++ b/grep.changes @@ -1,3 +1,11 @@ +------------------------------------------------------------------- +Mon Aug 31 10:23:23 UTC 2020 - Bernhard Voelker + +- gnulib-test-avoid-FP-perror-strerror.patch: Add patch to +avoid false-positive error in gnulib tests 'test-perror2' and +'test-strerror_r', visible on armv7l. +- grep.spec: Reference the patch. + ------------------------------------------------------------------- Wed Jul 1 03:30:01 UTC 2020 - Bernhard Wiedemann diff --git a/grep.spec b/grep.spec index 726a835..e1fb8bb 100644 --- a/grep.spec +++ b/grep.spec @@ -27,6 +27,7 @@ Source0: https://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.xz Source2: https://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.xz.sig Source3: https://savannah.gnu.org/project/memberlist-gpgkeys.php?group=grep&download=1#/%{name}.keyring Source4: profile.sh +Patch1: gnulib-test-avoid-FP-perror-strerror.patch BuildRequires: fdupes BuildRequires: makeinfo BuildRequires: pcre-devel @@ -42,6 +43,7 @@ match to a specified pattern. By default, grep prints the matching lines. %prep %setup -q +%patch1 %build %configure \