[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] test: expose recent gnulib canonicalize bug
From: |
Pádraig Brady |
Subject: |
Re: [PATCH] test: expose recent gnulib canonicalize bug |
Date: |
Wed, 08 Feb 2012 10:24:10 +0000 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:6.0) Gecko/20110816 Thunderbird/6.0 |
On 02/07/2012 12:33 AM, Eric Blake wrote:
> https://lists.gnu.org/archive/html/bug-gnulib/2012-02/msg00038.html
> detailed a couple of bugs in gnulib's canonicalize that were visible
> through coreutils' readlink, but only on systems where // is distinct
> from /. This particular test assumes that POSIX will be fixed to
> require canonicalization of a symlink containing just slashes will
> behave as if slashes separating the symlink from the rest of the
> name are elided (see http://austingroupbugs.net/view.php?id=541),
> as that is the only useful (and current) behavior on Cygwin. That is,
>
> ln -s / root
> ls root/dev
>
> must list the contents of /dev, not //dev.
>
> * tests/misc/readlink-root: New test.
> * tests/Makefile.am (TESTS): Run it.
> ---
>
> Partway through my promise to test my recent patches to realpath,
> by starting with missing readlink coverage.
>
> I have not yet had a chance to run coreutils under valgrind or
> Coverity after configuring with gl_cv_double_slash_root=yes.
>
> tests/Makefile.am | 1 +
> tests/misc/readlink-root | 92
> ++++++++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 93 insertions(+), 0 deletions(-)
> create mode 100644 tests/misc/readlink-root
>
> diff --git a/tests/Makefile.am b/tests/Makefile.am
> index a94aaa2..39b17ab 100644
> --- a/tests/Makefile.am
> +++ b/tests/Makefile.am
> @@ -220,6 +220,7 @@ TESTS = \
> misc/printf-surprise \
> misc/pwd-long \
> misc/readlink-fp-loop \
> + misc/readlink-root \
> misc/realpath \
> misc/runcon-no-reorder \
> misc/sha1sum \
> diff --git a/tests/misc/readlink-root b/tests/misc/readlink-root
> new file mode 100644
> index 0000000..3c30cec
> --- /dev/null
> +++ b/tests/misc/readlink-root
> @@ -0,0 +1,92 @@
> +#!/bin/sh
> +# tests for canonicalize-existing mode (readlink -e) on /.
> +
> +# 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 3 of the License, 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/>.
> +
> +. "${srcdir=.}/init.sh"; path_prepend_ ../src
> +print_ver_ readlink
> +
> +stat_single=$(stat -c %d:%i /) || framework_failure_
> +stat_double=$(stat -c %d:%i //) || framework_failure_
> +double_slash=/
> +if test x"$stat_single" = x"stat_double"; then
> + double_slash=//
> +fi
> +
> +test -d /dev || framework_failure_
Maybe just skip_ above?
> + readlink -e / || fail=1
> + readlink -e // || fail=1
> + readlink -e /// || fail=1
> + readlink -e /.//.. || fail=1
> + readlink -e //.//.. || fail=1
> + readlink -e ///.//.. || fail=1
> + readlink -e one || fail=1
> + readlink -e two || fail=1
> + readlink -e three || fail=1
> + readlink -e one-dots || fail=1
> + readlink -e two-dots || fail=1
> + readlink -e three-dots || fail=1
> + readlink -e one-dev || fail=1
> + # We know /dev exists, but cannot assume //dev exists
> + readlink -f two-dev || fail=1
> + readlink -e three-dev || fail=1
> + readlink -e one/dev || fail=1
> + readlink -f two/dev || fail=1
> + readlink -e three/dev || fail=1
> + readlink -e one-dots/dev || fail=1
> + readlink -f two-dots/dev || fail=1
> + readlink -e three-dots/dev || fail=1
cool.
thanks,
Pádraig.