From 3df45147622a2b74c45d6bbf6c9db7764b3c40d7 Mon Sep 17 00:00:00 2001 From: Stefano Lattarini Date: Mon, 10 Sep 2012 13:47:44 +0200 Subject: [PATCH] coverage: expose fork bomb in $(BUILT_SOURCES) handling 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: * t/built-sources-fork-bomb.sh: New test. * Makefile.am (XFAIL_TESTS): Add it. Signed-off-by: Stefano Lattarini --- 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 656ebac78..e19f3fdf8 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 000000000..827970447 --- /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 . + +# 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: +# +# + +. ./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 + +: -- 2.47.2