From: "Darrick J. Wong" <darrick.wong@oracle.com>
To: Eryu Guan <guaneryu@gmail.com>
Cc: linux-xfs@vger.kernel.org, fstests@vger.kernel.org
Subject: Re: [PATCH ] xfs: validate unicode filesystem labels
Date: Mon, 20 May 2019 09:36:24 -0700 [thread overview]
Message-ID: <20190520163624.GB5334@magnolia> (raw)
In-Reply-To: <20190511073732.GH15846@desktop>
On Sat, May 11, 2019 at 03:37:32PM +0800, Eryu Guan wrote:
> On Tue, May 07, 2019 at 09:57:23AM -0700, Darrick J. Wong wrote:
> > From: Darrick J. Wong <darrick.wong@oracle.com>
> >
> > Make sure we can set and retrieve unicode labels, including emoji.
> >
> > Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
> > ---
> > tests/xfs/739 | 169 +++++++++++++++++++++++++++++++++++++++++++++++++++++
> > tests/xfs/739.out | 1
> > tests/xfs/group | 1
> > 3 files changed, 171 insertions(+)
> > create mode 100755 tests/xfs/739
> > create mode 100644 tests/xfs/739.out
> >
> >
> > diff --git a/tests/xfs/739 b/tests/xfs/739
> > new file mode 100755
> > index 00000000..f8796cc3
> > --- /dev/null
> > +++ b/tests/xfs/739
> > @@ -0,0 +1,169 @@
> > +#! /bin/bash
> > +# SPDX-License-Identifier: GPL-2.0+
> > +# Copyright (c) 2019, Oracle and/or its affiliates. All Rights Reserved.
> > +#
> > +# FS QA Test No. 739
> > +#
> > +# Create a directory with multiple filenames that all appear the same
> > +# (in unicode, anyway) but point to different inodes. In theory all
> > +# Linux filesystems should allow this (filenames are a sequence of
> > +# arbitrary bytes) even if the user implications are horrifying.
> > +#
> > +seq=`basename "$0"`
> > +seqres="$RESULT_DIR/$seq"
> > +echo "QA output created by $seq"
> > +
> > +here=`pwd`
> > +tmp=/tmp/$$
> > +status=1 # failure is the default!
> > +trap "_cleanup; exit \$status" 0 1 2 3 15
> > +
> > +_cleanup()
> > +{
> > + rm -f $tmp.*
> > +}
> > +
> > +# get standard environment, filters and checks
> > +. ./common/rc
> > +. ./common/filter
> > +
> > +_supported_os Linux
> > +_supported_fs xfs
> > +_require_scratch_nocheck
> > +_require_xfs_io_command 'label'
> > +
> > +# Only run this on xfs if xfs_scrub is available and has the unicode checker
> > +check_xfs_scrub() {
>
> This function has multiple copies in different tests now, e.g.
> generic/45{34} and xfs/262, make it a common helper?
Ok.
> > + _scratch_mkfs >> $seqres.full 2>&1
> > + _scratch_mount >> $seqres.full 2>&1
> > + _supports_xfs_scrub "$SCRATCH_MNT" "$SCRATCH_DEV"
> > + res=$?
> > + _scratch_unmount
> > +
> > + test $res -ne 0 && return 1
> > +
> > + # We only care if xfs_scrub has unicode string support...
> > + if ! type ldd > /dev/null 2>&1 || \
> > + ! ldd "${XFS_SCRUB_PROG}" | grep -q libicui18n; then
> > + return 1
> > + fi
> > +
> > + return 0
> > +}
> > +
> > +want_scrub=
> > +check_xfs_scrub && want_scrub=yes
> > +
> > +filter_scrub() {
> > + grep 'Unicode' | sed -e 's/^.*Duplicate/Duplicate/g'
> > +}
> > +
> > +maybe_scrub() {
> > + test "$want_scrub" = "yes" || return
> > +
> > + output="$(LC_ALL="C.UTF-8" ${XFS_SCRUB_PROG} -v -n "${SCRATCH_MNT}" 2>&1)"
> > + echo "xfs_scrub output:" >> $seqres.full
> > + echo "$output" >> $seqres.full
> > + echo "$output" >> $tmp.scrub
> > +}
> > +
> > +testlabel() {
> > + local label="$(echo -e "$1")"
> > + local expected_label="label = \"$label\""
> > +
> > + echo "Formatting label '$1'." >> $seqres.full
> > + # First, let's see if we can recover the label when we set it
> > + # with mkfs.
> > + _scratch_mkfs -L "$label" >> $seqres.full 2>&1
> > + _scratch_mount >> $seqres.full 2>&1
> > + blkid -s LABEL $SCRATCH_DEV | _filter_scratch | sed -e "s/ $//g" >> $seqres.full
> > + blkid -d -s LABEL $SCRATCH_DEV | _filter_scratch | sed -e "s/ $//g" >> $seqres.full
> > +
> > + # Did it actually stick?
> > + local actual_label="$($XFS_IO_PROG -c label $SCRATCH_MNT)"
> > + echo "$actual_label" >> $seqres.full
> > +
> > + if [ "${actual_label}" != "${expected_label}" ]; then
> > + echo "Saw '${expected_label}', expected '${actual_label}'."
> > + fi
> > + maybe_scrub
> > + _scratch_unmount
> > +
> > + # Now let's try setting the label online to see what happens.
> > + echo "Setting label '$1'." >> $seqres.full
> > + _scratch_mkfs >> $seqres.full 2>&1
> > + _scratch_mount >> $seqres.full 2>&1
> > + $XFS_IO_PROG -c "label -s $label" $SCRATCH_MNT >> $seqres.full
> > + blkid -s LABEL $SCRATCH_DEV | _filter_scratch | sed -e "s/ $//g" >> $seqres.full
> > + blkid -d -s LABEL $SCRATCH_DEV | _filter_scratch | sed -e "s/ $//g" >> $seqres.full
> > + _scratch_cycle_mount
> > +
> > + # Did it actually stick?
> > + local actual_label="$($XFS_IO_PROG -c label $SCRATCH_MNT)"
> > + echo "$actual_label" >> $seqres.full
> > +
> > + if [ "${actual_label}" != "${expected_label}" ]; then
> > + echo "Saw '${expected_label}'; expected '${actual_label}'."
> > + fi
> > + maybe_scrub
> > + _scratch_unmount
> > +}
> > +
> > +# Simple test
> > +testlabel "simple"
> > +
> > +# Two different renderings of the same label
> > +testlabel "caf\xc3\xa9.fs"
> > +testlabel "cafe\xcc\x81.fs"
> > +
> > +# Arabic code point can expand into a muuuch longer series
> > +testlabel "xfs_\xef\xb7\xba.fs"
> > +
> > +# Fake slash?
> > +testlabel "urk\xc0\xafmoo"
> > +
> > +# Emoji: octopus butterfly owl giraffe
> > +testlabel "\xf0\x9f\xa6\x91\xf0\x9f\xa6\x8b\xf0\x9f\xa6\x89"
> > +
> > +# unicode rtl widgets too...
> > +testlabel "mo\xe2\x80\xaegnp.txt"
> > +testlabel "motxt.png"
> > +
> > +# mixed-script confusables
> > +testlabel "mixed_t\xce\xbfp"
> > +testlabel "mixed_top"
> > +
> > +# single-script spoofing
> > +testlabel "a\xe2\x80\x90b.fs"
> > +testlabel "a-b.fs"
> > +
> > +testlabel "dz_dze.fs"
> > +testlabel "dz_\xca\xa3e.fs"
> > +
> > +# symbols
> > +testlabel "_Rs.fs"
> > +testlabel "_\xe2\x82\xa8.fs"
> > +
> > +# zero width joiners
> > +testlabel "moocow.fs"
> > +testlabel "moo\xe2\x80\x8dcow.fs"
> > +
> > +# combining marks
> > +testlabel "\xe1\x80\x9c\xe1\x80\xad\xe1\x80\xaf.fs"
> > +testlabel "\xe1\x80\x9c\xe1\x80\xaf\xe1\x80\xad.fs"
> > +
> > +# fake dotdot entry
> > +testlabel ".\xe2\x80\x8d"
> > +testlabel "..\xe2\x80\x8d"
> > +
> > +# Did scrub choke on anything?
> > +if [ "$want_scrub" = "yes" ]; then
> > + grep -q "^Warning.*gnp.txt.*suspicious text direction" $tmp.scrub || \
> > + echo "No complaints about direction overrides?"
> > + grep -q "^Warning.*control characters" $tmp.scrub || \
> > + echo "No complaints about control characters?"
> > +fi
> > +
> > +# success, all done
> > +status=0
> > +exit
> > diff --git a/tests/xfs/739.out b/tests/xfs/739.out
> > new file mode 100644
> > index 00000000..f4f653e2
> > --- /dev/null
> > +++ b/tests/xfs/739.out
> > @@ -0,0 +1 @@
> > +QA output created by 739
>
> "Silence is golden" ?
Ok.
--D
> Thanks,
> Eryu
>
> > diff --git a/tests/xfs/group b/tests/xfs/group
> > index e71b058f..c8620d72 100644
> > --- a/tests/xfs/group
> > +++ b/tests/xfs/group
> > @@ -501,3 +501,4 @@
> > 501 auto quick unlink
> > 502 auto quick unlink
> > 503 auto copy metadump
> > +739 auto quick mkfs label
> >
next prev parent reply other threads:[~2019-05-20 16:36 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-05-07 16:57 [PATCH 0/1] fstests: various new tests Darrick J. Wong
2019-05-07 16:57 ` [PATCH ] xfs: validate unicode filesystem labels Darrick J. Wong
2019-05-11 7:37 ` Eryu Guan
2019-05-20 16:36 ` Darrick J. Wong [this message]
-- strict thread matches above, loose matches on Subject: below --
2019-05-20 22:31 [PATCH 0/1] fstests: various new tests Darrick J. Wong
2019-05-20 22:31 ` [PATCH ] xfs: validate unicode filesystem labels Darrick J. Wong
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190520163624.GB5334@magnolia \
--to=darrick.wong@oracle.com \
--cc=fstests@vger.kernel.org \
--cc=guaneryu@gmail.com \
--cc=linux-xfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox