@@ -44,13 +44,13 @@ extern const uint32_t mp_frozen_str_sizes[];
4444extern const char mp_frozen_str_content [];
4545
4646// On input, *len contains size of name, on output - size of content
47- const char * mp_find_frozen_str (const char * str , size_t * len ) {
47+ const char * mp_find_frozen_str (const char * str , size_t str_len , size_t * len ) {
4848 const char * name = mp_frozen_str_names ;
4949
5050 size_t offset = 0 ;
5151 for (int i = 0 ; * name != 0 ; i ++ ) {
5252 size_t l = strlen (name );
53- if (l == * len && !memcmp (str , name , l )) {
53+ if (l == str_len && !memcmp (str , name , l )) {
5454 * len = mp_frozen_str_sizes [i ];
5555 return mp_frozen_str_content + offset ;
5656 }
@@ -60,16 +60,16 @@ const char *mp_find_frozen_str(const char *str, size_t *len) {
6060 return NULL ;
6161}
6262
63- STATIC mp_lexer_t * mp_lexer_frozen_str (const char * str , size_t len ) {
64- size_t name_len = len ;
65- const char * content = mp_find_frozen_str (str , & len );
63+ STATIC mp_lexer_t * mp_lexer_frozen_str (const char * str , size_t str_len ) {
64+ size_t file_len ;
65+ const char * content = mp_find_frozen_str (str , str_len , & file_len );
6666
6767 if (content == NULL ) {
6868 return NULL ;
6969 }
7070
71- qstr source = qstr_from_strn (str , name_len );
72- mp_lexer_t * lex = MICROPY_MODULE_FROZEN_LEXER (source , content , len , 0 );
71+ qstr source = qstr_from_strn (str , str_len );
72+ mp_lexer_t * lex = MICROPY_MODULE_FROZEN_LEXER (source , content , file_len , 0 );
7373 return lex ;
7474}
7575
@@ -82,11 +82,11 @@ STATIC mp_lexer_t *mp_lexer_frozen_str(const char *str, size_t len) {
8282extern const char mp_frozen_mpy_names [];
8383extern const mp_raw_code_t * const mp_frozen_mpy_content [];
8484
85- STATIC const mp_raw_code_t * mp_find_frozen_mpy (const char * str , size_t len ) {
85+ STATIC const mp_raw_code_t * mp_find_frozen_mpy (const char * str , size_t str_len ) {
8686 const char * name = mp_frozen_mpy_names ;
8787 for (size_t i = 0 ; * name != 0 ; i ++ ) {
8888 size_t l = strlen (name );
89- if (l == len && !memcmp (str , name , l )) {
89+ if (l == str_len && !memcmp (str , name , l )) {
9090 return mp_frozen_mpy_content [i ];
9191 }
9292 name += l + 1 ;
@@ -136,15 +136,16 @@ mp_import_stat_t mp_frozen_stat(const char *str) {
136136}
137137
138138int mp_find_frozen_module (const char * str , size_t len , void * * data ) {
139+ // The +8/-8 account for the .frozen/ path prefix used on frozen modules.
139140 #if MICROPY_MODULE_FROZEN_STR
140- mp_lexer_t * lex = mp_lexer_frozen_str (str , len );
141+ mp_lexer_t * lex = mp_lexer_frozen_str (str + 8 , len - 8 );
141142 if (lex != NULL ) {
142143 * data = lex ;
143144 return MP_FROZEN_STR ;
144145 }
145146 #endif
146147 #if MICROPY_MODULE_FROZEN_MPY
147- const mp_raw_code_t * rc = mp_find_frozen_mpy (str , len );
148+ const mp_raw_code_t * rc = mp_find_frozen_mpy (str + 8 , len - 8 );
148149 if (rc != NULL ) {
149150 * data = (void * )rc ;
150151 return MP_FROZEN_MPY ;
0 commit comments