Browse Source

finsh: add check on converting octal numbers

The digit in octal numbers should with in 0~7. Check on it in
token_proc_number. This issue is found by Clang.
Grissiom 11 years ago
parent
commit
ec4b865579
1 changed files with 8 additions and 2 deletions
  1. 8 2
      components/finsh/finsh_token.c

+ 8 - 2
components/finsh/finsh_token.c

@@ -508,10 +508,10 @@ static void token_proc_number(struct finsh_token* self)
 
 			*p = '\0';
 		}
-		else
+		else if ( '0' <= ch && ch <= '7' )
 		{
 			b = 8;
-			while ( is_digit(ch) )
+			while ( '0' <= ch && ch <= '7' )
 			{
 				*p++ = ch;
 				ch = token_next_char(self);
@@ -519,6 +519,12 @@ static void token_proc_number(struct finsh_token* self)
 
 			*p = '\0';
 		}
+		else
+		{
+			/* Not a valid number */
+			token_prev_char(self);
+			return;
+		}
 
 		self->value.int_value = token_spec_number(buf, strlen(buf), b);
 		self->current_token = finsh_token_type_value_int;