[pypy-issue] Issue #2396: PyMemoryView_GET_BUFFER: bogus view.c__format (pypy/pypy)

Armin Rigo issues-reply at bitbucket.org
Wed Sep 7 12:47:18 EDT 2016

New issue 2396: PyMemoryView_GET_BUFFER: bogus view.c__format

Armin Rigo:

Bogus lines in cpyext/memoryview.py:


    view.c__format = rffi.cast(rffi.UCHAR, w_obj.buf.getformat())
    view.c_format = rffi.cast(rffi.CCHARP, view.c__format)

The first line actually takes getformat(), which is annotated as returning an RPython *string*, not a char, and converts that string's pointer to an unsigned char, giving nonsense.  Much safer than rffi.cast() is to use ord() to convert a char to an integer, and complain if it isn't annotated as a char.

Then the second line takes a ``char *`` to it, but that doesn't make a null-terminated string.  If the goal was to have a one-char null-terminated string, we'd need to ensure a null character in the second position.

More information about the pypy-issue mailing list