boostorg / boostorg/python

exec_file crash on Debug mode (Win 10)

Aberta
#383 1 comentário 1 reação 0 responsáveis Ver no GitHub
Linguagem predominante
C++
Estrelas
537
Forks
223
Merge médio
11h 22min
PRs com merge (30d)
2

Descrição

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();
}
```

Guia de contribuição

Nenhum guia de contribuição indexado para este repositório

Direção de pesquisa

No repository files or tests are named. Reproduce the crash on the stated Windows 10, VS2019, VC142, Python 3.10 debug setup, then compare the failing exec_file path using PyRun_File with the working PyRun_SimpleFile and _Py_fopen_obj path. Done means executing embedding.py in debug mode without the reported crash.

Escrita pelo modelo de indexação a partir do texto da issue.

Avaliação

Stack de tecnologia
cpp, python
Domínio
backend
Tipo de issue
Bug
Dificuldade
4/5
Tempo estimado
3-5 dias
Status de atividade
Estagnada
Clareza
Razoavelmente clara
Facilidade para iniciantes
35/100

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.