boostorg / boostorg/python

exec_file crash on Debug mode (Win 10)

Abierto
#383 1 comentario 1 reacción 0 asignados Ver en GitHub
Lenguaje dominante
C++
Estrellas
537
Forks
223
Merge medio
11 h 22 min
PR fusionados (30 d)
2

Descripción

I face a crash on build 1.78 of boost python, on Windows 10, VS2019, VC142, Python 3.10 only on **debug** mode. Here is the script

```
#ifdef _DEBUG

#undef _DEBUG

#endif
#define PY_SSIZE_T_CLEAN
#include
int main(int argc, char* argv[])
{
Py_Initialize();
char* f = const_cast("E:\\Projects\\TestBoostPython\\embedding.py");
PyObject* fo = Py_BuildValue("s", f);
PyObject* fb = Py_None;
PyUnicode_FSConverter(fo, &fb);
char* f_as_uft = PyBytes_AsString(fb);
FILE* fs = fopen(f_as_uft, "r+");
Py_DECREF(fo);
Py_DECREF(fb);
PyObject* result = PyRun_File(fs,
f,
Py_file_input,
nullptr, nullptr);
fclose(fs);
Py_FinalizeEx();
return 0;
}
```

which is exactly the exec_file of boost python.

The call stack is

```
ucrtbase.dll!_invoke_watson() Unknown
ucrtbase.dll!_invalid_parameter() Unknown
ucrtbase.dll!_invalid_parameter_noinfo() Unknown
ucrtbase.dll!_read() Unknown
ucrtbase.dll!common_refill_and_read_nolock() Unknown
ucrtbase.dll!fgetc() Unknown
python310.dll!check_bom(int(*)(tok_state *) get_char, void(*)(int, tok_state *) unget_char, int(*)(tok_state *, const char *) tok, tok_state *) Line 267 C
python310.dll!tok_underflow_file(tok_state * tok) Line 944 C
[Inline Frame] python310.dll!tok_nextc(tok_state *) Line 1042 C
python310.dll!tok_get(tok_state * tok, const char * * p_start, const char * * p_end) Line 1366 C
[Inline Frame] python310.dll!PyTokenizer_Get(tok_state * tok, const char * *) Line 2053 C
python310.dll!_PyPegen_fill_token(Parser * p) Line 745 C
[Inline Frame] python310.dll!_PyPegen_expect_token(Parser *) Line 900 C
[Inline Frame] python310.dll!_tmp_15_rule(Parser *) Line 22816 C
[Inline Frame] python310.dll!_PyPegen_lookahead(int) Line 891 C
python310.dll!compound_stmt_rule(Parser * p) Line 2145 C
[Inline Frame] python310.dll!statement_rule(Parser *) Line 1490 C
[Inline Frame] python310.dll!_loop1_11_rule(Parser *) Line 22574 C
[Inline Frame] python310.dll!statements_rule(Parser *) Line 1446 C
python310.dll!file_rule(Parser * p) Line 957 C
python310.dll!_PyPegen_parse(Parser * p) Line 34511 C
python310.dll!_PyPegen_run_parser(Parser * p) Line 1325 C
[Inline Frame] python310.dll!_PyPegen_run_parser_from_file_pointer(_iobuf *) Line 1423 C
python310.dll!_PyParser_ASTFromFile(_iobuf * fp, _object * filename_ob, const char * enc, int mode, const char * ps1, const char * ps2, PyCompilerFlags * flags, int * errcode, _arena * arena) Line 26 C
python310.dll!pyrun_file(_iobuf * fp, _object * filename, int start, _object * globals, _object * locals, int closeit, PyCompilerFlags * flags) Line 1199 C
python310.dll!PyRun_FileExFlags(_iobuf * fp, const char * filename, int start, _object * globals, _object * locals, int closeit, PyCompilerFlags * flags) Line 1230 C
```

However the following code runs smoothly on the same environment

```
#ifdef _DEBUG
#undef _DEBUG
#endif

#define PY_SSIZE_T_CLEAN
#include

int main(int argc, char* argv[])
{
Py_Initialize();
char* f = const_cast("E:\\Projects\\TestBoostPython\\embedding.py");
PyObject* obj = Py_BuildValue("s", f);
FILE* file = _Py_fopen_obj(obj, "r+");
if (file != NULL) {
PyRun_SimpleFile(file, f);
}
Py_Finalize();
}
```

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.