aboutsummaryrefslogtreecommitdiffstats
path: root/tests/component/applypatch_modes_test.cpp
diff options
context:
space:
mode:
authorTao Bao <tbao@google.com>2018-07-16 22:09:59 -0700
committerTao Bao <tbao@google.com>2018-07-17 12:16:53 -0700
commit1700cc46b5531499b7b532cda05d442f5f60acd4 (patch)
treefa668d92873b1f1d1df22bb992610ea53a69ed49 /tests/component/applypatch_modes_test.cpp
parent624b6b6cd582d4a58f924b3e1677628bd8260349 (diff)
downloadandroid_bootable_recovery-1700cc46b5531499b7b532cda05d442f5f60acd4.tar.gz
android_bootable_recovery-1700cc46b5531499b7b532cda05d442f5f60acd4.tar.bz2
android_bootable_recovery-1700cc46b5531499b7b532cda05d442f5f60acd4.zip
Fix the arguments passed to getopt_long(3).
The getopt_long(3) implementation in Android (upstream freebsd) expects a null-terminated array while parsing long options with required args. if (long_options[match].has_arg == required_argument) { optarg = nargv[optind++]; } ... if (long_options[match].has_arg == required_argument && optarg == NULL) { return (BADARG); } This seems to make sense in practice, as getopt(3) takes the first two arguments of argc and argv that are "as passed to the main() function on program invocation", and both of C and C++ spec say "the value of argv[argc] shall be 0". Prior to the CL, we may run into undefined behavior on malformed input command line (e.g. missing arg for an option that requires one). This CL fixes the issue by always appending a nullptr to the argument list (but without counting that into argc). Test: Build and boot into recovery with commands. Change-Id: Ic6c37548f4db2f30aeabd40f387ca916eeca5392
Diffstat (limited to 'tests/component/applypatch_modes_test.cpp')
0 files changed, 0 insertions, 0 deletions