Author: Matti Picus <[email protected]>
Branch: issue2444
Changeset: r89240:50865558868e
Date: 2016-12-26 22:24 +0200
http://bitbucket.org/pypy/pypy/changeset/50865558868e/
Log: test, fix for issue 2453
diff --git a/pypy/module/cpyext/memoryobject.py
b/pypy/module/cpyext/memoryobject.py
--- a/pypy/module/cpyext/memoryobject.py
+++ b/pypy/module/cpyext/memoryobject.py
@@ -76,7 +76,11 @@
try:
view.c_buf = rffi.cast(rffi.VOIDP, buf.get_raw_address())
except ValueError:
- raise BufferError("could not create buffer from object")
+ if not space.isinstance_w(w_obj, space.w_str):
+ # XXX Python 3?
+ raise BufferError("could not create buffer from object")
+ view.c_buf = rffi.cast(rffi.VOIDP, rffi.str2charp(space.str_w(w_obj),
track_allocation=False))
+ rffi.setintfield(view, 'c_readonly', 1)
ret = fill_Py_buffer(space, buf, view)
view.c_obj = make_ref(space, w_obj)
return ret
@@ -99,13 +103,11 @@
view.c_buf = rffi.cast(rffi.VOIDP, w_obj.buf.get_raw_address())
#view.c_obj = make_ref(space, w_obj) # NO - this creates a ref cycle!
rffi.setintfield(view, 'c_readonly', w_obj.buf.readonly)
- isstr = False
except ValueError:
w_s = w_obj.descr_tobytes(space)
view.c_obj = make_ref(space, w_s)
view.c_buf = rffi.cast(rffi.VOIDP, rffi.str2charp(space.str_w(w_s),
track_allocation=False))
rffi.setintfield(view, 'c_readonly', 1)
- isstr = True
return view
def fill_Py_buffer(space, buf, view):
diff --git a/pypy/module/cpyext/test/test_memoryobject.py
b/pypy/module/cpyext/test/test_memoryobject.py
--- a/pypy/module/cpyext/test/test_memoryobject.py
+++ b/pypy/module/cpyext/test/test_memoryobject.py
@@ -57,7 +57,7 @@
PyObject* obj = PyTuple_GetItem(args, 0);
long ret, vlen;
memset(&view, 0, sizeof(Py_buffer));
- ret = PyObject_GetBuffer(obj, &view, PyBUF_FULL);
+ ret = PyObject_GetBuffer(obj, &view, PyBUF_FULL_RO);
if (ret != 0)
return NULL;
vlen = view.len / view.itemsize;
@@ -79,6 +79,8 @@
arr = module.PyMyArray(10)
ten = foo.get_len(arr)
assert ten == 10
+ ten = foo.get_len('1234567890')
+ assert ten == 10
ten = foo.test_buffer(arr)
assert ten == 10
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit