Commit 167f52587173ad87aac7780058d59aa96422eed0

Authored by Andreas Fenkart
Committed by Tom Rini
1 parent 57dc53a724

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

... ... @@ -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;
... ... @@ -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  
... ... @@ -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)