py/builtinevex: Handle invalid filenames for execfile.
If a non-string buffer was passed to execfile, then it would be passed as a non-null-terminated char* to mp_lexer_new_from_file. This changes mp_lexer_new_from_file to take a qstr instead (as in almost all cases a qstr will be created from this input anyway to set the `__file__` attribute on the module). This now makes execfile require a string (not generic buffer) argument, which is probably a good fix to make anyway. Fixes issue #12522. This work was funded through GitHub Sponsors. Signed-off-by: Jim Mussared <jim.mussared@gmail.com>
This commit is contained in:
committed by
Damien George
parent
480659b1ac
commit
5015779a6f
@@ -71,7 +71,7 @@ STATIC int compile_and_save(const char *file, const char *output_file, const cha
|
||||
if (strcmp(file, "-") == 0) {
|
||||
lex = mp_lexer_new_from_fd(MP_QSTR__lt_stdin_gt_, STDIN_FILENO, false);
|
||||
} else {
|
||||
lex = mp_lexer_new_from_file(file);
|
||||
lex = mp_lexer_new_from_file(qstr_from_str(file));
|
||||
}
|
||||
|
||||
qstr source_name;
|
||||
@@ -104,7 +104,7 @@ STATIC int compile_and_save(const char *file, const char *output_file, const cha
|
||||
vstr_add_str(&vstr, output_file);
|
||||
}
|
||||
|
||||
mp_raw_code_save_file(&cm, vstr_null_terminated_str(&vstr));
|
||||
mp_raw_code_save_file(&cm, qstr_from_strn(vstr.buf, vstr.len));
|
||||
vstr_clear(&vstr);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user