nvramtool: Consider a string with non-printable characters a "bad value".

Otherwise nvramtool -a with random cmos contents can mess up your terminal.

Signed-off-by: Stefan Reinauer <stepan@coresystems.de>
Acked-by: Patrick Georgi <patrick.georgi@coresystems.de>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@5015 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
Stefan Reinauer 2010-01-16 14:57:32 +00:00 committed by Stefan Reinauer
parent 12ee934cb3
commit 42944c3989
1 changed files with 21 additions and 5 deletions

View File

@ -672,6 +672,7 @@ static int list_cmos_entry(const cmos_entry_t * e, int show_name)
{
const cmos_enum_t *p;
unsigned long long value;
char *w;
/* sanity check CMOS entry */
switch (prepare_cmos_read(e)) {
@ -741,11 +742,26 @@ static int list_cmos_entry(const cmos_entry_t * e, int show_name)
break;
case CMOS_ENTRY_STRING:
if (show_name)
printf("%s = %s\n", e->name,
(char *)(unsigned long)value);
else
printf("%s\n", (char *)(unsigned long)value);
w = (char *)(unsigned long)value;
while (*w) {
if(!isprint(*w)) {
if (show_name)
printf("# Bad value -> %s\n", e->name);
else
printf("Bad value\n");
break;
}
w++;
}
if (!*w) {
if (show_name)
printf("%s = %s\n", e->name,
(char *)(unsigned long)value);
else
printf("%s\n", (char *)(unsigned long)value);
}
free((void *)(unsigned long)value);