getenv_f(): fix handling of too short buffers

Fix error handling in getenv_f() when the user provided buffer is too
short to hold the variable name; make sure to truncate and
NUL-terminate without overwriting the buffer limits.

Signed-off-by: Wolfgang Denk <wd@denx.de>
This commit is contained in:
Wolfgang Denk 2010-07-24 22:16:20 +02:00
parent 739b8080af
commit 9ed4a9582f

View File

@ -557,13 +557,19 @@ int getenv_f(char *name, char *buf, unsigned len)
}
if ((val=envmatch((uchar *)name, i)) < 0)
continue;
/* found; copy out */
n = 0;
while ((len > n++) && (*buf++ = env_get_char(val++)) != '\0')
;
if (len == n)
*buf = '\0';
return (n);
for (n=0; n<len; ++n, ++buf) {
if ((*buf = env_get_char(val++)) == '\0')
return n;
}
if (n)
*--buf = '\0';
printf("env_buf too small [%d]\n", len);
return n;
}
return (-1);
}