Commit 167f52587173ad87aac7780058d59aa96422eed0
Committed by
Tom Rini
1 parent
57dc53a724
Exists in
v2017.01-smarct4x
and in
30 other branches
tools: env validate: pass values as 0-based array
passing argv/argc can produce off-by-one errors Signed-off-by: Andreas Fenkart <andreas.fenkart@digitalstrom.com>
Showing 3 changed files with 15 additions and 12 deletions Side-by-side Diff
common/env_flags.c
... | ... | @@ -373,21 +373,21 @@ |
373 | 373 | /* |
374 | 374 | * Validate the parameters to "env set" directly |
375 | 375 | */ |
376 | -int env_flags_validate_env_set_params(int argc, char * const argv[]) | |
376 | +int env_flags_validate_env_set_params(char *name, char * const val[], int count) | |
377 | 377 | { |
378 | - if ((argc >= 3) && argv[2] != NULL) { | |
379 | - enum env_flags_vartype type = env_flags_get_type(argv[1]); | |
378 | + if ((count >= 1) && val[0] != NULL) { | |
379 | + enum env_flags_vartype type = env_flags_get_type(name); | |
380 | 380 | |
381 | 381 | /* |
382 | 382 | * we don't currently check types that need more than |
383 | 383 | * one argument |
384 | 384 | */ |
385 | - if (type != env_flags_vartype_string && argc > 3) { | |
386 | - printf("## Error: too many parameters for setting " | |
387 | - "\"%s\"\n", argv[1]); | |
385 | + if (type != env_flags_vartype_string && count > 1) { | |
386 | + printf("## Error: too many parameters for setting \"%s\"\n", | |
387 | + name); | |
388 | 388 | return -1; |
389 | 389 | } |
390 | - return env_flags_validate_type(argv[1], argv[2]); | |
390 | + return env_flags_validate_type(name, val[0]); | |
391 | 391 | } |
392 | 392 | /* ok */ |
393 | 393 | return 0; |
include/env_flags.h
... | ... | @@ -143,7 +143,7 @@ |
143 | 143 | /* |
144 | 144 | * Validate the parameters passed to "env set" for type compliance |
145 | 145 | */ |
146 | -int env_flags_validate_env_set_params(int argc, char * const argv[]); | |
146 | +int env_flags_validate_env_set_params(char *name, char *const val[], int count); | |
147 | 147 | |
148 | 148 | #else /* !USE_HOSTCC */ |
149 | 149 |
tools/env/fw_env.c
... | ... | @@ -498,8 +498,9 @@ |
498 | 498 | { |
499 | 499 | int i, rc; |
500 | 500 | size_t len; |
501 | - char *name; | |
501 | + char *name, **valv; | |
502 | 502 | char *value = NULL; |
503 | + int valc; | |
503 | 504 | |
504 | 505 | #ifdef CONFIG_FILE |
505 | 506 | if (argc >= 2 && strcmp(argv[1], "-c") == 0) { |
506 | 507 | |
507 | 508 | |
... | ... | @@ -543,13 +544,15 @@ |
543 | 544 | } |
544 | 545 | |
545 | 546 | name = argv[1]; |
547 | + valv = argv + 2; | |
548 | + valc = argc - 2; | |
546 | 549 | |
547 | - if (env_flags_validate_env_set_params(argc, argv) < 0) | |
550 | + if (env_flags_validate_env_set_params(name, valv, valc) < 0) | |
548 | 551 | return 1; |
549 | 552 | |
550 | 553 | len = 0; |
551 | - for (i = 2; i < argc; ++i) { | |
552 | - char *val = argv[i]; | |
554 | + for (i = 0; i < valc; ++i) { | |
555 | + char *val = valv[i]; | |
553 | 556 | size_t val_len = strlen(val); |
554 | 557 | |
555 | 558 | if (value) |