exec_file crash on Debug mode (Win 10)

Abierto
#383 1 comentario 1 reacción 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
35/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
cpp, python
Área
backend

Línea de trabajo

No se nombran archivos del repositorio ni pruebas. Reproduce el fallo en la configuración de depuración indicada de Windows 10, VS2019, VC142 y Python 3.10; después, compara la ruta exec_file que falla mediante PyRun_File con las rutas funcionales PyRun_SimpleFile y _Py_fopen_obj. Se considera terminado cuando embedding.py se ejecuta en modo de depuración sin el fallo indicado.

Escrito por el modelo de indexación a partir del texto del issue.

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 <Python.h>
int main(int argc, char* argv[])
{
	Py_Initialize();
	char* f = const_cast<char*>("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<char>()	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 <Python.h>

int main(int argc, char* argv[])
{
	Py_Initialize();
	char* f = const_cast<char*>("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();
}
Lenguaje dominante
C++
Estrellas
537
Forks
223
Merge medio
11 h 22 min
PR fusionados (30 d)
2

Guía de contribución

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

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de boostorg/python

Todos los issues de boostorg/python

Issues similares

Más issues de C++

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.