Commit 7b4b78bc authored by Damien George's avatar Damien George
Browse files

py: Put back proper ValueError for badly parsed integers.

parent b035db35
...@@ -41,6 +41,7 @@ mp_obj_t mp_parse_num_integer(const char *restrict str, uint len, int base) { ...@@ -41,6 +41,7 @@ mp_obj_t mp_parse_num_integer(const char *restrict str, uint len, int base) {
// string should be an integer number // string should be an integer number
machine_int_t int_val = 0; machine_int_t int_val = 0;
const char *restrict str_val_start = str;
for (; str < top; str++) { for (; str < top; str++) {
machine_int_t old_val = int_val; machine_int_t old_val = int_val;
int dig = *str; int dig = *str;
...@@ -69,6 +70,11 @@ mp_obj_t mp_parse_num_integer(const char *restrict str, uint len, int base) { ...@@ -69,6 +70,11 @@ mp_obj_t mp_parse_num_integer(const char *restrict str, uint len, int base) {
} }
} }
// check we parsed something
if (str == str_val_start) {
goto value_error;
}
// negate value if needed // negate value if needed
if (neg) { if (neg) {
int_val = -int_val; int_val = -int_val;
...@@ -80,12 +86,15 @@ mp_obj_t mp_parse_num_integer(const char *restrict str, uint len, int base) { ...@@ -80,12 +86,15 @@ mp_obj_t mp_parse_num_integer(const char *restrict str, uint len, int base) {
// check we reached the end of the string // check we reached the end of the string
if (str != top) { if (str != top) {
nlr_jump(mp_obj_new_exception_msg(&mp_type_SyntaxError, "invalid syntax for number")); goto value_error;
} }
// return the object // return the object
return MP_OBJ_NEW_SMALL_INT(int_val); return MP_OBJ_NEW_SMALL_INT(int_val);
value_error:
nlr_jump(mp_obj_new_exception_msg_varg(&mp_type_ValueError, "invalid literal for int() with base %d: '%s'", base, str));
overflow: overflow:
// TODO reparse using bignum // TODO reparse using bignum
nlr_jump(mp_obj_new_exception_msg(&mp_type_ValueError, "overflow parsing integer")); nlr_jump(mp_obj_new_exception_msg(&mp_type_ValueError, "overflow parsing integer"));
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment