[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
https://bitbucket.org/pypy/pypy/issues/2396/pymemoryview_get_buffer-bogus
Armin Rigo:
Bogus lines in cpyext/memoryview.py:
```
#!python
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