[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Invalid optimisation in _AS_PATH_WALK
From: |
Andreas Schwab |
Subject: |
Invalid optimisation in _AS_PATH_WALK |
Date: |
Thu, 04 Apr 2002 13:38:11 +0200 |
User-agent: |
Gnus/5.090005 (Oort Gnus v0.05) Emacs/21.2.50 (ia64-suse-linux) |
_AS_PATH_WALK always optimizes away $as_dummy if $1 contains variable
references. This is wrong. Only the _result_ of an expansion is subject
to field splitting. Literal text is never split, even if it is part of
the same word with expansions.
Andreas.
2002-04-04 Andreas Schwab <address@hidden>
* lib/m4sugar/m4sh.m4 (_AS_PATH_WALK): Only simplify if path
contains no literal separators.
--- lib/m4sugar/m4sh.m4.~1.80.~ 2002-04-03 13:19:13.000000000 +0200
+++ lib/m4sugar/m4sh.m4 2002-04-04 11:32:43.000000000 +0200
@@ -626,13 +626,14 @@
# Still very private as its interface looks quite bad.
#
# `$as_dummy' forces splitting on constant user-supplied paths.
-# POSIX.2 word splitting is done only on the output of word
-# expansions, not every word. This closes a longstanding sh security
-# hole. Optimize it away when not needed.
+# POSIX.2 field splitting is done only on the result of word
+# expansions, not on literal text. This closes a longstanding sh security
+# hole. Optimize it away when not needed, i.e., if there are no literal
+# path separators.
m4_define([_AS_PATH_WALK],
[AS_REQUIRE([_AS_PATH_SEPARATOR_PREPARE])dnl
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-AS_LITERAL_IF(m4_default([$1], [$PATH]),
+m4_bmatch([$1], [[:;]],
[as_dummy="$1"
for as_dir in $as_dummy],
[for as_dir in m4_default([$1], [$PATH])])
--
Andreas Schwab, SuSE Labs, address@hidden
SuSE GmbH, Deutschherrnstr. 15-19, D-90429 Nürnberg
Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5
"And now for something completely different."
- Invalid optimisation in _AS_PATH_WALK,
Andreas Schwab <=