coreutils
[Top][All Lists]
Advanced

[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.



reply via email to

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