Coverity (correctly) identified an issue[1] where, after the recent
rework[2], the internal flag, used by argparse to track what arguments
were previously encountered or not, was out of range for the type and no
longer having any effect. Fixing this flag to be back into range then,
somewhat surprisingly, caused a number of unit test failures to occur.

The reason for these failures is that the tracking of args encountered
is done via setting an internal flag on the user-passed arguments
object. In the unit tests, this caused issues where the flags field was
not getting properly reset between calls to the parse operation. [This
is only an issue after the rework, because previously information like
param type and optionality was encoded in the flags, so they were more
often reset during testing].

Rather than fixing the tests directly to always reset the flags, which
is simply working around the issue IMHO, this patchset instead fixes the
issue in a more user-friendly way by changing the library to never
modify the user-passed structure - making it completely safe to reuse
across multiple calls. This is done in the first two patches.

The final, third patch, adds an additional unit test to check that the
tracking of flags being seen or not, and the handling of the
"RTE_ARGPARSE_FLAG_SUPPORT_MULTI" flag is correct. This closes a gap in
testing, since the original issue of the flag being out-of-range should
have been caught in testing, rather than having to rely on coverity.

[1] Coverity Issue: 470190
[2] https://github.com/DPDK/dpdk/commit/04acc21beeeb78477b15a3f497d3628fd70a6a9f

Bruce Richardson (3):
  argparse: track parsed arguments internally
  argparse: mark parameter struct as const
  test/argparse: add test for repeated arguments

 app/test/test_argparse.c    | 33 +++++++++++++++++
 lib/argparse/rte_argparse.c | 73 ++++++++++++++++++++++---------------
 lib/argparse/rte_argparse.h |  2 +-
 3 files changed, 77 insertions(+), 31 deletions(-)

--
2.48.1

Reply via email to