qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Max Reitz <mreitz@redhat.com>
To: Kevin Wolf <kwolf@redhat.com>
Cc: qemu-devel@nongnu.org, qemu-block@nongnu.org
Subject: Re: [PATCH] iotests: Quote $cmd in _send_qemu_cmd
Date: Tue, 15 Dec 2020 13:14:36 +0100	[thread overview]
Message-ID: <61dede63-7561-88a7-312e-ec5babf667a1@redhat.com> (raw)
In-Reply-To: <20201215114320.GB8185@merkur.fritz.box>

On 15.12.20 12:43, Kevin Wolf wrote:
> Am 14.12.2020 um 18:58 hat Max Reitz geschrieben:
>> With bash 5.1, the output of the following script (which creates an
>> array with a single element, then takes a single-element slice from that
>> array, and echos the result) changes:
>>
>>    a=("double  space")
>>    a=${a[@]:0:1}
>>    echo "$a"
>>
>> from "double space" to "double  space", i.e. all white space is
>> preserved as-is.  This is probably what we actually want here (judging
>> from the "...to accommodate pathnames with spaces" comment), but before
>> 5.1, we have to quote the ${} slice to get the same behavior.
>>
>> In any case, without quoting, the reference output of many iotests is
>> different between bash 5.1 and pre-5.1, which is not very good.  We
>> should fix it by quoting here, and then adjusting all the reference
>> output of all iotests using _send_qemu_cmd accordingly.  (The only
>> ones we do not need to change are those that do not have multiple
>> consecutive whitespaces in their _send_qemu_cmd parameters.)
>>
>> Signed-off-by: Max Reitz <mreitz@redhat.com>
>> ---
>> Alternatively, we could explicitly collapse all whitespace sequences
>> into single spaces, but I believe that would defeat the purpose of
>> "accomodat[ing] pathnames with spaces".
> 
> I agree that quoting is the better alternative.
> 
> The whole thing shouldn't be needed if callers propertly quote
> filenames. If I understand correctly, these lines just try to merge
> back filenames that have been split into multiple words because the
> caller wasn't careful. But we can't reliably do that because we don't
> know which and how much whitespace was removed.

No, without quoting here, the slice operation will actually collapse 
spaces inside of array elements, as shown in the commit message
(a=("x  y") creates an array with a single element that just has two 
spaces in it).  If the caller didn’t quote, then quoting in 
_send_qemu_cmd wouldn’t help either, because the whitespace would no 
longer be present in $@.

Most callers of _send_qemu_cmd actually do something like this:

_send_qemu_cmd \
     $QEMU_HANDLE \
     "{ 'execute': 'something',
        'arguments': ... }" \
     'return'

So they do quote all of their arguments, and actually only pass three 
(or four, with success_or_failure=y), so basically the slicing is 
generally unnecessary and we’d just need cmd=$1 (not $2, because 
_send_qemu_cmd likes to invoke “shift”).

In fact, if you do that on top of this patch (cmd=$1 instead of the 
fancy slice), you’ll see that the only test that then doesn’t pass is 
102.  I think that’s because it has this one _send_qemu_cmd invocation 
that forgot to pass $QEMU_HANDLE...?

So, alternatively to quoting the slice, we could also just set cmd=$1 
and fix 102.

>> I used this script to verify that the git-diff only changes whitespace
>> (except for the hunk in common.qemu):
>>
>>    https://gist.github.com/XanClic/41cfcc2ac4619421883e8a97790f5c9e
> 
> 'git diff --word-diff' is good enough for me.

Learn a new thing every day.

> This seems to be based on your branch (312.out doesn't exist yet for
> me), so instead of merging, you can just have my:
> 
> Reviewed-by: Kevin Wolf <kwolf@redhat.com>

In any case (because perhaps we just want cmd=$1, I don’t know), thanks. :)

Max



  reply	other threads:[~2020-12-15 12:16 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-14 17:58 [PATCH] iotests: Quote $cmd in _send_qemu_cmd Max Reitz
2020-12-15 11:43 ` Kevin Wolf
2020-12-15 12:14   ` Max Reitz [this message]
2020-12-15 15:49     ` Kevin Wolf
2020-12-15 15:58       ` Max Reitz

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=61dede63-7561-88a7-312e-ec5babf667a1@redhat.com \
    --to=mreitz@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.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;
as well as URLs for NNTP newsgroup(s).