Subject: Re: bug#21513: (now an infinite loop in grep/tests/triple-backref?)
From: Paul Eggert <[email-masked]>
To: Martin Liška <[email-masked]>
Cc: [email-masked], Andreas Schwab <[email-masked]>
Date: Mon, 20 Jan 2020 09:50:23 -0800
List-Id: <debbugs-submit.debbugs.gnu.org>

On 1/20/20 2:49 AM, Martin Liška wrote:
> 
> In this case an infinite loop is highly undesirable.

Sure, but the regex code is littered with highly undesirable code like this, as 
it's easy to use a weird regexp to make the code explode exponentially and 
there's little practical difference between that an infinite loop.

Come to think of it, the grep test infrastructure already has a way to deal with 
this sort of thing, so all we need to do to fix this particular glitch is adjust 
triple-backref to use timeout, which I did by installing the attached patch.

Thanks Andreas for diagnosing the problem. I hope there's a gcc bug report about 
it somewhere. I could not use Martin's recipe on Fedora 31 x86-64 because gcc 
-m32 -flto didn't look inside the .a files that the grep build procedure creates 
and uses. I've never had much luck with -flto anyway as it has a habit of 
running into compiler bugs. I now also see that Red Hat has qualms about the 
GOLD linker <https://fedoraproject.org/wiki/Changes/BINUTILS_GOLD> which the 
recipe relies on, as Google has decided not to continue GOLD development (which 
was news to me).

I'll mark Bug#21513 as done again, since the original report is fixed. The 
triple-backref bug is Bug#22793 and also glibc bug 11053, both of which are 
still open.
From 759745166c0503680bb8fa1f4f60209292740492 Mon Sep 17 00:00:00 2001
From: Paul Eggert <[email-masked]>
Date: Mon, 20 Jan 2020 09:32:49 -0800
Subject: [PATCH] tests: work around GCC -fprofile-generate bug
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* tests/triple-backref: Add a 10 s timeout to work around
what appears to be a GCC bug with -fprofile-generate.
Problem reported by Martin Liška, with diagnosis by
Andreas Schwab (Bug#21513).
---
 tests/triple-backref | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
 mode change 100755 => 100644 tests/triple-backref

diff --git a/tests/triple-backref b/tests/triple-backref
old mode 100755
new mode 100644
index 27ab9a3..167b8ac
--- a/tests/triple-backref
+++ b/tests/triple-backref
@@ -8,11 +8,12 @@
 # notice and this notice are preserved.
 
 . "${srcdir=.}/init.sh"; path_prepend_ ../src
+require_timeout_
 
 echo a > in || framework_failure_
 
 fail=0
-grep -E '(.?)(.?)(.?)\3\2\1' in > out || fail=1
+timeout 10 grep -E '(.?)(.?)(.?)\3\2\1' in > out || fail=1
 compare out in || fail=1
 
 Exit $fail
-- 
2.17.1