automake-ng
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Automake-NG] [FYI 1/2] coverage: expose fork bomb in $(BUILT_SOURCES) h


From: Stefano Lattarini
Subject: [Automake-NG] [FYI 1/2] coverage: expose fork bomb in $(BUILT_SOURCES) handling
Date: Tue, 11 Sep 2012 16:49:51 +0200

Due to how the handling of $(BUILT_SOURCES) is implemented in Automake-NG,
a recursive make call in the recipe of any $(BUILT_SOURCES) (or of any of
its prerequisites) will cause an infinite recursion (complete with fork
bomb, yuck).  Expose the issue in a test case (still failing, of course).

See:
<http://lists.gnu.org/archive/html/help-smalltalk/2012-08/msg00027.html>
<http://lists.gnu.org/archive/html/automake-patches/2012-08/msg00052.html>

* t/built-sources-fork-bomb.sh: New test.
* Makefile.am (XFAIL_TESTS): Add it.

Signed-off-by: Stefano Lattarini <address@hidden>
---
 Makefile.am                  |  1 +
 t/built-sources-fork-bomb.sh | 69 ++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 70 insertions(+)
 create mode 100755 t/built-sources-fork-bomb.sh

diff --git a/Makefile.am b/Makefile.am
index 656ebac..e19f3fd 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -338,6 +338,7 @@ perl_fake_XFAIL_TESTS = \
 
 XFAIL_TESTS = \
   t/all.sh \
+  t/built-sources-fork-bomb.sh \
   t/override-suggest-local.sh \
   t/comments-in-var-def.sh \
   t/cond17.sh \
diff --git a/t/built-sources-fork-bomb.sh b/t/built-sources-fork-bomb.sh
new file mode 100755
index 0000000..8279704
--- /dev/null
+++ b/t/built-sources-fork-bomb.sh
@@ -0,0 +1,69 @@
+#! /bin/sh
+# Copyright (C) 2012 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# Due to how the handling of $(BUILT_SOURCES) is implemented in Automake-NG,
+# a recursive make call in the recipe of any $(BUILT_SOURCES) (or of any of
+# its prerequisites) might cause an infinite recursion (complete with fork
+# bomb, yuck) if not handled correctly.  Verify that this doesn't happen.
+# For more background, see:
+# <http://lists.gnu.org/archive/html/help-smalltalk/2012-08/msg00027.html>
+# <http://lists.gnu.org/archive/html/automake-patches/2012-08/msg00052.html>
+
+. ./defs || exit 1
+
+echo AC_OUTPUT >> configure.ac
+
+cat > Makefile.am << 'END'
+BUILT_SOURCES = foo
+.PHONY: build-foo
+build-foo:
+       echo OK > foo
+foo:
+       $(MAKE) build-foo
+
+# If the bug is still present, we want this test to fail, not to actually
+# go fork bomb and potentially crash the user machine.  Take care of that.
+
+is_too_deep := $(shell test $(MAKELEVEL) -lt 10 && echo no)
+
+## Extra indentation here required to avoid confusing Automake.
+## FIXME: now that we assume make is GNU make, this shouldn't happen!
+ ifeq ($(is_too_deep),no)
+   # All is ok.
+ else
+   $(error ::OOPS:: Recursion too deep, $(MAKELEVEL) levels)
+ endif
+END
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+
+./configure
+
+$MAKE -n foo >output 2>&1 || { cat output; exit 1; }
+cat output
+test ! -f foo
+# Guard against possible infinite recursion.
+$FGREP '::OOPS::' output && exit 1
+
+$MAKE foo >output 2>&1 || { cat output; exit 1; }
+cat output
+$MAKE foo
+# Guard against possible infinite recursion.
+$FGREP '::OOPS::' output && exit 1
+
+:
-- 
1.7.12




reply via email to

[Prev in Thread] Current Thread [Next in Thread]