Signed-off-by: zqb-all <zhuangqiu...@gmail.com> --- tools/env/fw_env.c | 38 ++++++++++++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 4 deletions(-)
diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c index a5d7595..4f4cd54 100644 --- a/tools/env/fw_env.c +++ b/tools/env/fw_env.c @@ -398,7 +398,14 @@ char *fw_getenv(char *name) { char *env, *nxt; - for (env = environment.data; *env; env = nxt + 1) { + for (nxt = env = environment.data; !(*nxt); ++nxt) { + if (nxt >= &environment.data[ENV_SIZE]) { + fprintf(stderr, "## Error: environment is empty\n"); + return NULL; + } + } + + for (env = nxt; *env; env = nxt + 1) { char *val; for (nxt = env; *nxt; ++nxt) { @@ -423,8 +430,15 @@ char *fw_getenv(char *name) char *fw_getdefenv(char *name) { char *env, *nxt; + for (nxt = env = default_environment; !(*nxt); ++nxt) { + if (nxt >= &default_environment[ENV_SIZE]) { + fprintf(stderr, + "## Error: default environment is empty\n"); + return NULL; + } + } - for (env = default_environment; *env; env = nxt + 1) { + for (env = nxt; *env; env = nxt + 1) { char *val; for (nxt = env; *nxt; ++nxt) { @@ -464,7 +478,16 @@ int fw_printenv(int argc, char *argv[], int value_only, struct env_opts *opts) if (argc == 0) { /* Print all env variables */ char *env, *nxt; - for (env = environment.data; *env; env = nxt + 1) { + + for (nxt = env = environment.data; !(*nxt); ++nxt) { + if (nxt >= &environment.data[ENV_SIZE]) { + fprintf(stderr, + "## Error: environment is empty\n"); + return -1; + } + } + + for (env = nxt; *env; env = nxt + 1) { for (nxt = env; *nxt; ++nxt) { if (nxt >= &environment.data[ENV_SIZE]) { fprintf(stderr, "## Error: " @@ -537,7 +560,14 @@ int fw_env_write(char *name, char *value) /* * search if variable with this name already exists */ - for (nxt = env = environment.data; *env; env = nxt + 1) { + for (nxt = env = environment.data; !(*nxt); ++nxt) { + if (nxt >= &environment.data[ENV_SIZE]) { + fprintf(stderr, "## Error: environment is empty\n"); + errno = EINVAL; + return -1; + } + } + for (env = nxt; *env; env = nxt + 1) { for (nxt = env; *nxt; ++nxt) { if (nxt >= &environment.data[ENV_SIZE]) { fprintf(stderr, "## Error: " -- 1.9.1 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot