1
0
Fork 0

forall: fix crash with no command

When callback= is used, optparse does not automatically initialize
The destination when a dest= is not specified.  Refine the test to
allow dest= options when callback= is used even when it seems like
it is otherwise redundant.

Bug: b/436611422
Change-Id: I5185f95cb857ca6d37357cac77fb117a83db9c0c
This commit is contained in:
Mike Frysinger 2025-09-15 10:23:20 -04:00
parent 80d1a5ad3e
commit abbe9d265a
2 changed files with 8 additions and 2 deletions

View file

@ -133,7 +133,7 @@ without iterating through the remaining projects.
@staticmethod
def _cmd_option(option, _opt_str, _value, parser):
setattr(parser.values, option.dest or "command", list(parser.rargs))
setattr(parser.values, option.dest, list(parser.rargs))
while parser.rargs:
del parser.rargs[0]
@ -161,6 +161,7 @@ without iterating through the remaining projects.
p.add_option(
"-c",
"--command",
dest="command",
help="command (and arguments) to execute",
action="callback",
callback=self._cmd_option,

View file

@ -94,7 +94,12 @@ class AllCommands(unittest.TestCase):
"""Block redundant dest= arguments."""
def _check_dest(opt):
if opt.dest is None or not opt._long_opts:
"""Check the dest= setting."""
# If the destination is not set, nothing to check.
# If long options are not set, then there's no implicit destination.
# If callback is used, then a destination might be needed because
# optparse cannot assume a value is always stored.
if opt.dest is None or not opt._long_opts or opt.callback:
return
long = opt._long_opts[0]