[New-bugs-announce] [issue24561] [VS2013] Py_InitializeEx causes fatal error being from winnt-service

Vitaly Murashev report at bugs.python.org
Fri Jul 3 19:47:45 CEST 2015


New submission from Vitaly Murashev:

[Affects Windows only]
Brief description (after analysis in debugger):

Py_InitializeEx fails inside internal call:

1.
    if (initstdio() < 0)
        Py_FatalError(
            "Py_Initialize: can't initialize sys standard streams");

2. inside initstdio():

    if (!is_valid_fd(fd)) {
        std = Py_None;
        Py_INCREF(std);
    }
    else {
// ===> is_valid_fd() passed and we come here
        std = create_stdio(iomod, fd, 0, "<stdin>", encoding, errors);
        if (std == NULL)
            goto error; // ===> this goto leads to fatal error

3.
is_valid_fd(int fd)   /// => JFI: fd=0
{
    int dummy_fd;
    if (fd < 0 || !_PyVerify_fd(fd))
        return 0;
    dummy_fd = dup(fd); /// ==>> dup() WORKS well
    if (dummy_fd < 0)
        return 0;
    close(dummy_fd);
    return 1;
}

4.
Let's Look whats going in create_stdio():
Modules\_io\fileio.c

static int
fileio_init(PyObject *oself, PyObject *args, PyObject *kwds)
{ ...
    if (fd >= 0) {
        if (check_fd(fd))
            goto error;    /// => fail is here 

5. Let's have a look at check_fd():
static int
check_fd(int fd)
{
#if defined(HAVE_FSTAT) /// => yes, it is defined for Windows
    struct stat buf;
    if (!_PyVerify_fd(fd) || (fstat(fd, &buf) < 0 && errno == EBADF)) {
        PyObject *exc;
        char *msg = strerror(EBADF);
        exc = PyObject_CallFunction(PyExc_OSError, "(is)",
                                    EBADF, msg);
        PyErr_SetObject(PyExc_OSError, exc);
        Py_XDECREF(exc);
        return -1;
    }
#endif
    return 0;
}

----------
components: IO, Interpreter Core, Windows
messages: 246199
nosy: paul.moore, steve.dower, tim.golden, vmurashev, zach.ware
priority: normal
severity: normal
status: open
title: [VS2013] Py_InitializeEx causes fatal error being from winnt-service
type: crash
versions: Python 3.4, Python 3.5, Python 3.6

_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue24561>
_______________________________________


More information about the New-bugs-announce mailing list