diff options
author | ian <ian@FreeBSD.org> | 2015-12-29 21:29:05 +0000 |
---|---|---|
committer | ian <ian@FreeBSD.org> | 2015-12-29 21:29:05 +0000 |
commit | db615833324a17b469dc05ddf53af4a41f2f3636 (patch) | |
tree | 62fc612ebf016bac9f27de95be3c10232f7c0914 /sys/boot | |
parent | d5b4026ea636cfe11667663b94ad58f07a9698d3 (diff) | |
download | FreeBSD-src-db615833324a17b469dc05ddf53af4a41f2f3636.zip FreeBSD-src-db615833324a17b469dc05ddf53af4a41f2f3636.tar.gz |
Fix the error checking for the ubenv command. This moves the check for an
empty ldvar (which amounts to the varname string starting with '=') into
the if block that manipulates ldvar, which avoids later referencing ldvar
when it was never initialized.
Submitted by: Thomas Skibo
Pointy hat: ian
Diffstat (limited to 'sys/boot')
-rw-r--r-- | sys/boot/uboot/common/main.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/sys/boot/uboot/common/main.c b/sys/boot/uboot/common/main.c index 3071426..6c7b893 100644 --- a/sys/boot/uboot/common/main.c +++ b/sys/boot/uboot/common/main.c @@ -585,6 +585,10 @@ handle_uboot_env_var(enum ubenv_action action, const char * var) */ if (action == UBENV_IMPORT) { len = strcspn(var, "="); + if (len == 0) { + printf("name cannot start with '=': '%s'\n", var); + return; + } if (var[len] == 0) { strcpy(ldvar, "uboot."); strncat(ldvar, var, sizeof(ldvar) - 7); @@ -604,9 +608,11 @@ handle_uboot_env_var(enum ubenv_action action, const char * var) var = &var[6]; } - /* If ldvar is malformed or there's no variable name left, punt. */ - if (ldvar[0] == 0 || var[0] == 0) + /* If there is no variable name left, punt. */ + if (var[0] == 0) { + printf("empty variable name\n"); return; + } val = ub_env_get(var); if (action == UBENV_SHOW) { |