Merge pull request #1972 from tannewt/validate_mpy_load

Validate mpy load
This commit is contained in:
Dan Halbert 2019-06-26 20:39:50 -04:00 committed by GitHub
commit c562b19238
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
23 changed files with 144 additions and 34 deletions

@ -1 +1 @@
Subproject commit 182eebdc8168e3d14cd0cb28db3abb734c9e45f3 Subproject commit b9280af5142fc41639229544678e23b5cca07c3a

@ -1 +1 @@
Subproject commit 0cc2e975ed22ace0d679c6fb8f3388034b88bcf1 Subproject commit 154b74de020764597ba49f0d1e8cc18d55b3643b

@ -1 +1 @@
Subproject commit f5892e24f7235c4bde2908cbb3cd0a3d6b34d421 Subproject commit bd7ddc67dc86f7ad0115f58ab80d5605739c6482

@ -1 +1 @@
Subproject commit 5a50830814aaeeb1fda34ed0ba2f8397415d9796 Subproject commit ddc74844983b35b027bd45091c7b8bb3c8d7a2d1

@ -1 +1 @@
Subproject commit 4b101f00320d36b23f8cc28cf3f12127085894c1 Subproject commit f1171f94083ba64d153ff3f90eeb07500331d6e1

@ -1 +1 @@
Subproject commit 397badae5863a1ce932213ef527e82314ac498a1 Subproject commit 6d1ae72916cf240ea86185c45f844d59f56d8ec3

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-05-13 17:34-0700\n" "POT-Creation-Date: 2019-06-25 17:53-0700\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -460,6 +460,14 @@ msgstr ""
msgid "Command must be an int between 0 and 255" msgid "Command must be an int between 0 and 255"
msgstr "" msgstr ""
#: py/persistentcode.c
msgid "Corrupt .mpy file"
msgstr ""
#: py/emitglue.c
msgid "Corrupt raw code"
msgstr ""
#: ports/nrf/common-hal/bleio/UUID.c #: ports/nrf/common-hal/bleio/UUID.c
#, c-format #, c-format
msgid "Could not decode ble_uuid, err 0x%04x" msgid "Could not decode ble_uuid, err 0x%04x"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-05-13 17:41-0700\n" "POT-Creation-Date: 2019-06-25 17:53-0700\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -450,6 +450,14 @@ msgstr ""
msgid "Command must be an int between 0 and 255" msgid "Command must be an int between 0 and 255"
msgstr "" msgstr ""
#: py/persistentcode.c
msgid "Corrupt .mpy file"
msgstr ""
#: py/emitglue.c
msgid "Corrupt raw code"
msgstr ""
#: ports/nrf/common-hal/bleio/UUID.c #: ports/nrf/common-hal/bleio/UUID.c
#, c-format #, c-format
msgid "Could not decode ble_uuid, err 0x%04x" msgid "Could not decode ble_uuid, err 0x%04x"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-05-13 17:34-0700\n" "POT-Creation-Date: 2019-06-25 17:53-0700\n"
"PO-Revision-Date: 2018-07-27 11:55-0700\n" "PO-Revision-Date: 2018-07-27 11:55-0700\n"
"Last-Translator: Pascal Deneaux\n" "Last-Translator: Pascal Deneaux\n"
"Language-Team: Sebastian Plamauer, Pascal Deneaux\n" "Language-Team: Sebastian Plamauer, Pascal Deneaux\n"
@ -454,6 +454,14 @@ msgstr ""
msgid "Command must be an int between 0 and 255" msgid "Command must be an int between 0 and 255"
msgstr "Der Befehl muss ein int zwischen 0 und 255 sein" msgstr "Der Befehl muss ein int zwischen 0 und 255 sein"
#: py/persistentcode.c
msgid "Corrupt .mpy file"
msgstr ""
#: py/emitglue.c
msgid "Corrupt raw code"
msgstr ""
#: ports/nrf/common-hal/bleio/UUID.c #: ports/nrf/common-hal/bleio/UUID.c
#, c-format #, c-format
msgid "Could not decode ble_uuid, err 0x%04x" msgid "Could not decode ble_uuid, err 0x%04x"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-05-13 17:34-0700\n" "POT-Creation-Date: 2019-06-25 17:53-0700\n"
"PO-Revision-Date: 2018-07-27 11:55-0700\n" "PO-Revision-Date: 2018-07-27 11:55-0700\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: \n"
@ -450,6 +450,14 @@ msgstr ""
msgid "Command must be an int between 0 and 255" msgid "Command must be an int between 0 and 255"
msgstr "" msgstr ""
#: py/persistentcode.c
msgid "Corrupt .mpy file"
msgstr ""
#: py/emitglue.c
msgid "Corrupt raw code"
msgstr ""
#: ports/nrf/common-hal/bleio/UUID.c #: ports/nrf/common-hal/bleio/UUID.c
#, c-format #, c-format
msgid "Could not decode ble_uuid, err 0x%04x" msgid "Could not decode ble_uuid, err 0x%04x"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-05-13 17:34-0700\n" "POT-Creation-Date: 2019-06-25 17:53-0700\n"
"PO-Revision-Date: 2018-07-27 11:55-0700\n" "PO-Revision-Date: 2018-07-27 11:55-0700\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: @sommersoft, @MrCertainly\n" "Language-Team: @sommersoft, @MrCertainly\n"
@ -454,6 +454,14 @@ msgstr ""
msgid "Command must be an int between 0 and 255" msgid "Command must be an int between 0 and 255"
msgstr "" msgstr ""
#: py/persistentcode.c
msgid "Corrupt .mpy file"
msgstr ""
#: py/emitglue.c
msgid "Corrupt raw code"
msgstr ""
#: ports/nrf/common-hal/bleio/UUID.c #: ports/nrf/common-hal/bleio/UUID.c
#, c-format #, c-format
msgid "Could not decode ble_uuid, err 0x%04x" msgid "Could not decode ble_uuid, err 0x%04x"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-05-13 17:34-0700\n" "POT-Creation-Date: 2019-06-25 17:53-0700\n"
"PO-Revision-Date: 2018-08-24 22:56-0500\n" "PO-Revision-Date: 2018-08-24 22:56-0500\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: \n"
@ -466,6 +466,14 @@ msgstr "La entrada en la columna debe ser digitalio.DigitalInOut"
msgid "Command must be an int between 0 and 255" msgid "Command must be an int between 0 and 255"
msgstr "Bytes debe estar entre 0 y 255." msgstr "Bytes debe estar entre 0 y 255."
#: py/persistentcode.c
msgid "Corrupt .mpy file"
msgstr ""
#: py/emitglue.c
msgid "Corrupt raw code"
msgstr ""
#: ports/nrf/common-hal/bleio/UUID.c #: ports/nrf/common-hal/bleio/UUID.c
#, c-format #, c-format
msgid "Could not decode ble_uuid, err 0x%04x" msgid "Could not decode ble_uuid, err 0x%04x"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-05-13 17:34-0700\n" "POT-Creation-Date: 2019-06-25 17:53-0700\n"
"PO-Revision-Date: 2018-12-20 22:15-0800\n" "PO-Revision-Date: 2018-12-20 22:15-0800\n"
"Last-Translator: Timothy <me@timothygarcia.ca>\n" "Last-Translator: Timothy <me@timothygarcia.ca>\n"
"Language-Team: fil\n" "Language-Team: fil\n"
@ -459,6 +459,14 @@ msgstr ""
msgid "Command must be an int between 0 and 255" msgid "Command must be an int between 0 and 255"
msgstr "Sa gitna ng 0 o 255 dapat ang bytes." msgstr "Sa gitna ng 0 o 255 dapat ang bytes."
#: py/persistentcode.c
msgid "Corrupt .mpy file"
msgstr ""
#: py/emitglue.c
msgid "Corrupt raw code"
msgstr ""
#: ports/nrf/common-hal/bleio/UUID.c #: ports/nrf/common-hal/bleio/UUID.c
#, c-format #, c-format
msgid "Could not decode ble_uuid, err 0x%04x" msgid "Could not decode ble_uuid, err 0x%04x"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: 0.1\n" "Project-Id-Version: 0.1\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-05-13 17:34-0700\n" "POT-Creation-Date: 2019-06-25 17:53-0700\n"
"PO-Revision-Date: 2019-04-14 20:05+0100\n" "PO-Revision-Date: 2019-04-14 20:05+0100\n"
"Last-Translator: Pierrick Couturier <arofarn@arofarn.info>\n" "Last-Translator: Pierrick Couturier <arofarn@arofarn.info>\n"
"Language-Team: fr\n" "Language-Team: fr\n"
@ -465,6 +465,14 @@ msgstr "L'entrée 'Column' doit être un digitalio.DigitalInOut"
msgid "Command must be an int between 0 and 255" msgid "Command must be an int between 0 and 255"
msgstr "La commande doit être un entier entre 0 et 255" msgstr "La commande doit être un entier entre 0 et 255"
#: py/persistentcode.c
msgid "Corrupt .mpy file"
msgstr ""
#: py/emitglue.c
msgid "Corrupt raw code"
msgstr ""
#: ports/nrf/common-hal/bleio/UUID.c #: ports/nrf/common-hal/bleio/UUID.c
#, c-format #, c-format
msgid "Could not decode ble_uuid, err 0x%04x" msgid "Could not decode ble_uuid, err 0x%04x"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-05-13 17:34-0700\n" "POT-Creation-Date: 2019-06-25 17:53-0700\n"
"PO-Revision-Date: 2018-10-02 16:27+0200\n" "PO-Revision-Date: 2018-10-02 16:27+0200\n"
"Last-Translator: Enrico Paganin <enrico.paganin@mail.com>\n" "Last-Translator: Enrico Paganin <enrico.paganin@mail.com>\n"
"Language-Team: \n" "Language-Team: \n"
@ -460,6 +460,14 @@ msgstr ""
msgid "Command must be an int between 0 and 255" msgid "Command must be an int between 0 and 255"
msgstr "I byte devono essere compresi tra 0 e 255" msgstr "I byte devono essere compresi tra 0 e 255"
#: py/persistentcode.c
msgid "Corrupt .mpy file"
msgstr ""
#: py/emitglue.c
msgid "Corrupt raw code"
msgstr ""
#: ports/nrf/common-hal/bleio/UUID.c #: ports/nrf/common-hal/bleio/UUID.c
#, c-format #, c-format
msgid "Could not decode ble_uuid, err 0x%04x" msgid "Could not decode ble_uuid, err 0x%04x"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-05-13 17:34-0700\n" "POT-Creation-Date: 2019-06-25 17:53-0700\n"
"PO-Revision-Date: 2019-03-19 18:37-0700\n" "PO-Revision-Date: 2019-03-19 18:37-0700\n"
"Last-Translator: Radomir Dopieralski <circuitpython@sheep.art.pl>\n" "Last-Translator: Radomir Dopieralski <circuitpython@sheep.art.pl>\n"
"Language-Team: pl\n" "Language-Team: pl\n"
@ -453,6 +453,14 @@ msgstr "Kolumny muszą być typu digitalio.DigitalInOut"
msgid "Command must be an int between 0 and 255" msgid "Command must be an int between 0 and 255"
msgstr "Komenda musi być int pomiędzy 0 a 255" msgstr "Komenda musi być int pomiędzy 0 a 255"
#: py/persistentcode.c
msgid "Corrupt .mpy file"
msgstr ""
#: py/emitglue.c
msgid "Corrupt raw code"
msgstr ""
#: ports/nrf/common-hal/bleio/UUID.c #: ports/nrf/common-hal/bleio/UUID.c
#, c-format #, c-format
msgid "Could not decode ble_uuid, err 0x%04x" msgid "Could not decode ble_uuid, err 0x%04x"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-05-13 17:34-0700\n" "POT-Creation-Date: 2019-06-25 17:53-0700\n"
"PO-Revision-Date: 2018-10-02 21:14-0000\n" "PO-Revision-Date: 2018-10-02 21:14-0000\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: \n"
@ -456,6 +456,14 @@ msgstr ""
msgid "Command must be an int between 0 and 255" msgid "Command must be an int between 0 and 255"
msgstr "Os bytes devem estar entre 0 e 255." msgstr "Os bytes devem estar entre 0 e 255."
#: py/persistentcode.c
msgid "Corrupt .mpy file"
msgstr ""
#: py/emitglue.c
msgid "Corrupt raw code"
msgstr ""
#: ports/nrf/common-hal/bleio/UUID.c #: ports/nrf/common-hal/bleio/UUID.c
#, c-format #, c-format
msgid "Could not decode ble_uuid, err 0x%04x" msgid "Could not decode ble_uuid, err 0x%04x"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: circuitpython-cn\n" "Project-Id-Version: circuitpython-cn\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-05-13 17:34-0700\n" "POT-Creation-Date: 2019-06-25 17:53-0700\n"
"PO-Revision-Date: 2019-04-13 10:10-0700\n" "PO-Revision-Date: 2019-04-13 10:10-0700\n"
"Last-Translator: hexthat\n" "Last-Translator: hexthat\n"
"Language-Team: Chinese Hanyu Pinyin\n" "Language-Team: Chinese Hanyu Pinyin\n"
@ -454,6 +454,14 @@ msgstr "Liè tiáomù bìxū shì digitalio.DigitalInOut"
msgid "Command must be an int between 0 and 255" msgid "Command must be an int between 0 and 255"
msgstr "Mìnglìng bìxū shì 0 dào 255 zhī jiān de int" msgstr "Mìnglìng bìxū shì 0 dào 255 zhī jiān de int"
#: py/persistentcode.c
msgid "Corrupt .mpy file"
msgstr ""
#: py/emitglue.c
msgid "Corrupt raw code"
msgstr ""
#: ports/nrf/common-hal/bleio/UUID.c #: ports/nrf/common-hal/bleio/UUID.c
#, c-format #, c-format
msgid "Could not decode ble_uuid, err 0x%04x" msgid "Could not decode ble_uuid, err 0x%04x"

View File

@ -5,8 +5,5 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR_APA102_MOSI), MP_ROM_PTR(&pin_PA00) }, { MP_ROM_QSTR(MP_QSTR_APA102_MOSI), MP_ROM_PTR(&pin_PA00) },
{ MP_ROM_QSTR(MP_QSTR_APA102_SCK), MP_ROM_PTR(&pin_PA01) }, { MP_ROM_QSTR(MP_QSTR_APA102_SCK), MP_ROM_PTR(&pin_PA01) },
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) },
{ MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) },
{ MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) },
}; };
MP_DEFINE_CONST_DICT(board_module_globals, board_global_dict_table); MP_DEFINE_CONST_DICT(board_module_globals, board_global_dict_table);

View File

@ -142,11 +142,12 @@ mp_obj_t mp_make_function_from_raw_code(const mp_raw_code_t *rc, mp_obj_t def_ar
fun = mp_obj_new_fun_asm(rc->n_pos_args, rc->data.u_native.fun_data, rc->data.u_native.type_sig); fun = mp_obj_new_fun_asm(rc->n_pos_args, rc->data.u_native.fun_data, rc->data.u_native.type_sig);
break; break;
#endif #endif
default: case MP_CODE_BYTECODE:
// rc->kind should always be set and BYTECODE is the only remaining case
assert(rc->kind == MP_CODE_BYTECODE);
fun = mp_obj_new_fun_bc(def_args, def_kw_args, rc->data.u_byte.bytecode, rc->data.u_byte.const_table); fun = mp_obj_new_fun_bc(def_args, def_kw_args, rc->data.u_byte.bytecode, rc->data.u_byte.const_table);
break; break;
default:
// All other kinds are invalid.
mp_raise_RuntimeError(translate("Corrupt raw code"));
} }
// check for generator functions and if so wrap in generator object // check for generator functions and if so wrap in generator object

View File

@ -102,20 +102,35 @@ STATIC void extract_prelude(const byte **ip, const byte **ip2, bytecode_prelude_
#include "py/parsenum.h" #include "py/parsenum.h"
STATIC void raise_corrupt_mpy(void) {
mp_raise_RuntimeError(translate("Corrupt .mpy file"));
}
STATIC int read_byte(mp_reader_t *reader) { STATIC int read_byte(mp_reader_t *reader) {
return reader->readbyte(reader->data); mp_uint_t b = reader->readbyte(reader->data);
if (b == MP_READER_EOF) {
raise_corrupt_mpy();
}
return b;
} }
STATIC void read_bytes(mp_reader_t *reader, byte *buf, size_t len) { STATIC void read_bytes(mp_reader_t *reader, byte *buf, size_t len) {
while (len-- > 0) { while (len-- > 0) {
*buf++ = reader->readbyte(reader->data); mp_uint_t b =reader->readbyte(reader->data);
if (b == MP_READER_EOF) {
raise_corrupt_mpy();
}
*buf++ = b;
} }
} }
STATIC size_t read_uint(mp_reader_t *reader) { STATIC size_t read_uint(mp_reader_t *reader) {
size_t unum = 0; size_t unum = 0;
for (;;) { for (;;) {
byte b = reader->readbyte(reader->data); mp_uint_t b = reader->readbyte(reader->data);
if (b == MP_READER_EOF) {
raise_corrupt_mpy();
}
unum = (unum << 7) | (b & 0x7f); unum = (unum << 7) | (b & 0x7f);
if ((b & 0x80) == 0) { if ((b & 0x80) == 0) {
break; break;
@ -145,11 +160,12 @@ STATIC mp_obj_t load_obj(mp_reader_t *reader) {
return mp_obj_new_str_from_vstr(obj_type == 's' ? &mp_type_str : &mp_type_bytes, &vstr); return mp_obj_new_str_from_vstr(obj_type == 's' ? &mp_type_str : &mp_type_bytes, &vstr);
} else if (obj_type == 'i') { } else if (obj_type == 'i') {
return mp_parse_num_integer(vstr.buf, vstr.len, 10, NULL); return mp_parse_num_integer(vstr.buf, vstr.len, 10, NULL);
} else { } else if (obj_type == 'f' || obj_type == 'c') {
assert(obj_type == 'f' || obj_type == 'c');
return mp_parse_num_decimal(vstr.buf, vstr.len, obj_type == 'c', false, NULL); return mp_parse_num_decimal(vstr.buf, vstr.len, obj_type == 'c', false, NULL);
} }
} }
raise_corrupt_mpy();
return MP_OBJ_FROM_PTR(&mp_const_none_obj);
} }
STATIC void load_bytecode_qstrs(mp_reader_t *reader, byte *ip, byte *ip_top) { STATIC void load_bytecode_qstrs(mp_reader_t *reader, byte *ip, byte *ip_top) {

View File

@ -59,8 +59,8 @@ for i in range(len(user_files)):
mod = 'mod%u' % i mod = 'mod%u' % i
try: try:
__import__(mod) __import__(mod)
except ValueError as er: except Exception as e:
print(mod, 'ValueError', er) print(mod, type(e).__name__, e)
# unmount and undo path addition # unmount and undo path addition
uos.umount('/userfs') uos.umount('/userfs')

View File

@ -1,3 +1,3 @@
mod0 ValueError Incompatible .mpy file. Please update all .mpy files. See http://adafru.it/mpy-update for more info. mod0 RuntimeError Corrupt .mpy file
mod1 ValueError Incompatible .mpy file. Please update all .mpy files. See http://adafru.it/mpy-update for more info. mod1 RuntimeError Corrupt .mpy file
mod2 ValueError Incompatible .mpy file. Please update all .mpy files. See http://adafru.it/mpy-update for more info. mod2 MpyError Incompatible .mpy file. Please update all .mpy files. See http://adafru.it/mpy-update for more info.