From: Theodore Ts'o Date: Sun, 12 Nov 2006 22:43:50 +0000 (-0500) Subject: Avoid infinite substitution loop in subst caused by autoconf pre-v2.60 X-Git-Tag: E2FSPROGS-1_40-WIP-1114~14 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=98224fbc1db8387da1fe0fd1bb3be25c18be2e98;p=thirdparty%2Fe2fsprogs.git Avoid infinite substitution loop in subst caused by autoconf pre-v2.60 Autoconf versions before 2.60 don't have datarootdir defined, and so this resulted in a @datarootdir@ --> @datarootdir@ infinite expansion. Signed-off-by: "Theodore Ts'o" --- diff --git a/util/ChangeLog b/util/ChangeLog index b9ca5c5fc..5f8f89a41 100644 --- a/util/ChangeLog +++ b/util/ChangeLog @@ -1,3 +1,10 @@ +2006-11-12 Theodore Tso + + * subst.c (substitute_line): Avoid infinite loop caused by a + substition such as @datarootdir@ --> @datarootdir@. (This + was caused by autoconf versions before 2.60, which didn't + define the @datarootdir@ expansion. + 2006-10-22 Theodore Tso * subst.conf.in: Add datarootdir definition for compatibility with diff --git a/util/subst.c b/util/subst.c index 9244e6203..445d3186a 100644 --- a/util/subst.c +++ b/util/subst.c @@ -165,6 +165,12 @@ static void substitute_line(char *line) #endif ptr = name_ptr-1; replace_string(ptr, end_ptr, ent->value); + if ((ent->value[0] == '@') && + (strlen(replace_name) == strlen(ent->value)-2) && + !strncmp(replace_name, ent->value+1, + strlen(ent->value)-2)) + /* avoid an infinite loop */ + ptr += strlen(ent->value); } /* * Now do a second pass to expand ${FOO}