diff options
author | Robert Maynard <rmaynard@nvidia.com> | 2021-03-24 18:03:23 (GMT) |
---|---|---|
committer | Robert Maynard <rmaynard@nvidia.com> | 2021-03-26 13:34:46 (GMT) |
commit | 79d7bcaf4029ce7b78abfcbcaf8cd1a09a172437 (patch) | |
tree | b482fd81880a5611779034850b37dc56f971cc4f /Source | |
parent | fb91e21e469edd827714011ecabdee587c72811f (diff) | |
download | CMake-79d7bcaf4029ce7b78abfcbcaf8cd1a09a172437.zip CMake-79d7bcaf4029ce7b78abfcbcaf8cd1a09a172437.tar.gz CMake-79d7bcaf4029ce7b78abfcbcaf8cd1a09a172437.tar.bz2 |
cmCommandLineArgument: correctly compute next parse index
Fixes #21966
Correctly compute the next parse index for `ZeroOrOne` when
it is zero, and for OneOrMore.
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmCommandLineArgument.h | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/Source/cmCommandLineArgument.h b/Source/cmCommandLineArgument.h index cbedf0a..495dc69 100644 --- a/Source/cmCommandLineArgument.h +++ b/Source/cmCommandLineArgument.h @@ -76,8 +76,9 @@ struct cmCommandLineArgument } else if (this->Type == Values::One || this->Type == Values::ZeroOrOne) { if (input.size() == this->Name.size()) { - ++index; - if (index >= allArgs.size() || allArgs[index][0] == '-') { + auto nextValueIndex = index + 1; + if (nextValueIndex >= allArgs.size() || + allArgs[nextValueIndex][0] == '-') { if (this->Type == Values::ZeroOrOne) { parseState = this->StoreCall(std::string{}, std::forward<CallState>(state)...) @@ -87,10 +88,11 @@ struct cmCommandLineArgument parseState = ParseMode::ValueError; } } else { - parseState = - this->StoreCall(allArgs[index], std::forward<CallState>(state)...) + parseState = this->StoreCall(allArgs[nextValueIndex], + std::forward<CallState>(state)...) ? ParseMode::Valid : ParseMode::Invalid; + index = nextValueIndex; } } else { // parse the string to get the value @@ -133,7 +135,8 @@ struct cmCommandLineArgument } else if (this->Type == Values::OneOrMore) { if (input.size() == this->Name.size()) { auto nextValueIndex = index + 1; - if (nextValueIndex >= allArgs.size() || allArgs[index + 1][0] == '-') { + if (nextValueIndex >= allArgs.size() || + allArgs[nextValueIndex][0] == '-') { parseState = ParseMode::ValueError; } else { std::string buffer = allArgs[nextValueIndex++]; @@ -145,6 +148,7 @@ struct cmCommandLineArgument this->StoreCall(buffer, std::forward<CallState>(state)...) ? ParseMode::Valid : ParseMode::Invalid; + index = (nextValueIndex - 1); } } } |