Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Conversation

@meatballhat
Copy link
Member

See #1135

thaJeztah and others added 3 commits May 14, 2020 14:42
Fix for a regression between v1.22.1 and v1.22.2, where
flag values starting with a hyphen would be parsed as a flag:

    runc update test_update --memory-swap -1
    Incorrect Usage: flag provided but not defined: -1

This problem was caused by `reorderArgs()` not properly checking
if the next arg in the list was a value for the flag (and not
the next flag);

Before this patch:

    args before reordering: --opt,--opt-value,arg1
    args after reordering:  --opt,arg1,--opt-value
    args before reordering: --opt,--opt-value,arg1,arg2
    args after reordering:  --opt,arg1,--opt-value,arg2
    args before reordering: arg1,--opt,--opt-value,arg2
    args after reordering:  --opt,arg2,arg1,--opt-value

After this patch is applied:

    args before reordering: --opt,--opt-value,arg1
    args after reordering:  --opt,--opt-value,arg1
    args before reordering: --opt,--opt-value,arg1,arg2
    args after reordering:  --opt,--opt-value,arg1,arg2
    args before reordering: arg1,--opt,--opt-value,arg2
    args after reordering:  --opt,--opt-value,arg1,arg2

Co-authored-by: lynn (they) <[email protected]>
Signed-off-by: Sebastiaan van Stijn <[email protected]>
If a `--` delimiter is encountered, any remaining _non-option-value_
arguments must be handled as argument.

From the POSIX spec (emphasis mine)
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html#tag_12_0):

> The first -- argument that *is not an option-argument* should be accepted
> as a delimiter indicating the end of options. Any following arguments
> should be treated as operands, even if they begin with the '-' character.

There was a corner-case scenario, where a `--flag` followed by a `--` did
not use `--` as value for the flag, but instead considered it as delimiter.

As a result;

    foo test arg1 --opt -- arg2

Would be reordered as:

   foo test --opt arg1 arg2

Which caused `arg1` to be used as value for `--opt`, instead of `--`,
which is the actual value.

Signed-off-by: Sebastiaan van Stijn <[email protected]>
@meatballhat meatballhat added kind/bug describes or fixes a bug area/v1 relates to / is being considered for v1 labels Apr 21, 2022
@meatballhat meatballhat added this to the Release 1.22.x milestone Apr 21, 2022
@meatballhat meatballhat requested a review from a team as a code owner April 21, 2022 18:39
@meatballhat meatballhat merged commit b963ddc into v1 Apr 21, 2022
@meatballhat meatballhat deleted the thaJeztah-fix_flag_parsing branch April 21, 2022 18:42
@thaJeztah
Copy link

OHMAN; really behind on my notifications. Thanks so much for carrying this, @meatballhat ❤️❤️ ❤️

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/v1 relates to / is being considered for v1 kind/bug describes or fixes a bug

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants