[pypy-commit] pypy py3.6: test, fix subtle logic bug for memoryview.cast (when view.format is not 'B')

mattip pypy.commits at gmail.com
Wed Aug 14 17:58:48 EDT 2019


Author: Matti Picus <matti.picus at gmail.com>
Branch: py3.6
Changeset: r97178:e0689d0f47c6
Date: 2019-08-15 00:58 +0300
http://bitbucket.org/pypy/pypy/changeset/e0689d0f47c6/

Log:	test, fix subtle logic bug for memoryview.cast (when view.format is
	not 'B')

diff --git a/lib-python/3/test/test_ssl.py b/lib-python/3/test/test_ssl.py
--- a/lib-python/3/test/test_ssl.py
+++ b/lib-python/3/test/test_ssl.py
@@ -2844,10 +2844,6 @@
                 else:
                     s.close()
 
-        def test_socketserver_urlib_uses_bisect(self):
-            b = urllib.request.bisect
-            raise ValueError('urllib.request.bisect is %s' % str(b))
-
         def test_socketserver(self):
             """Using socketserver to create and manage SSL connections."""
             server = make_https_server(self, certfile=CERTFILE)
diff --git a/pypy/objspace/std/memoryobject.py b/pypy/objspace/std/memoryobject.py
--- a/pypy/objspace/std/memoryobject.py
+++ b/pypy/objspace/std/memoryobject.py
@@ -482,8 +482,8 @@
                     " with an optional '@'")
 
         origfmt = view.getformat()
-        if self.get_native_fmtchar(origfmt) < 0 or \
-           (not is_byte_format(fmt) and not is_byte_format(origfmt)):
+        if (self.get_native_fmtchar(origfmt) < 0 or \
+           (not is_byte_format(origfmt))) and (not is_byte_format(fmt)):
             raise oefmt(space.w_TypeError,
                     "memoryview: cannot cast between"
                     " two non-byte formats")
diff --git a/pypy/objspace/std/test/test_memoryobject.py b/pypy/objspace/std/test/test_memoryobject.py
--- a/pypy/objspace/std/test/test_memoryobject.py
+++ b/pypy/objspace/std/test/test_memoryobject.py
@@ -487,6 +487,32 @@
         assert list(reversed(view)) == revlist
         assert list(reversed(view)) == view[::-1].tolist()
 
+
+class AppTestMemoryViewMockBuffer(object):
+    spaceconfig = dict(usemodules=['__pypy__'])
+        
+    def test_cast_with_byteorder(self):
+        import sys
+        if '__pypy__' not in sys.modules:
+            skip('PyPy-only test')
+
+        # create a memoryview with format '<B' (like ctypes does)
+        from __pypy__ import bufferable, newmemoryview
+        class B(bufferable.bufferable):
+            def __init__(self):
+                self.data = bytearray(b'abc')
+
+            def __buffer__(self, flags):
+                return newmemoryview(memoryview(self.data), 1, '<B')
+
+
+        obj = B()
+        buf = memoryview(obj)
+        assert buf.format == '<B'
+        # ensure we can cast this even though the format starts with '<'
+        assert buf.cast('B')[0] == ord('a')
+
+
 class AppTestMemoryViewReversed(object):
     spaceconfig = dict(usemodules=['array'])
     def test_reversed_non_bytes(self):


More information about the pypy-commit mailing list