diff options
author | Matus Valo <matusvalo@users.noreply.github.com> | 2023-04-30 15:19:32 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-30 15:19:32 +0200 |
commit | 0d34008a1746827519589d2e85bc3f54819d47ca (patch) | |
tree | 740d6c6ecb9de2112fc06aea2bcb0f86bccc428e | |
parent | 10cf5f6e18dbce625d32407a857cc06dd2cec637 (diff) | |
download | cython-0d34008a1746827519589d2e85bc3f54819d47ca.tar.gz |
Catch ValueError when calling memoryview() to avoid leaking implementation details (GH-5406)
-rw-r--r-- | Cython/Compiler/FusedNode.py | 2 | ||||
-rw-r--r-- | tests/memoryview/numpy_memoryview.pyx | 26 |
2 files changed, 27 insertions, 1 deletions
diff --git a/Cython/Compiler/FusedNode.py b/Cython/Compiler/FusedNode.py index 573530ac8..7876916db 100644 --- a/Cython/Compiler/FusedNode.py +++ b/Cython/Compiler/FusedNode.py @@ -511,7 +511,7 @@ class FusedCFuncDefNode(StatListNode): """ try: arg_as_memoryview = memoryview(arg) - except TypeError: + except (ValueError, TypeError): pass """) with pyx_code.indenter("else:"): diff --git a/tests/memoryview/numpy_memoryview.pyx b/tests/memoryview/numpy_memoryview.pyx index 2af6bfea4..7f98352a6 100644 --- a/tests/memoryview/numpy_memoryview.pyx +++ b/tests/memoryview/numpy_memoryview.pyx @@ -734,3 +734,29 @@ def same_type_after_arrays_composite(): cdef SameTypeAfterArraysStructComposite element arr = np.ones(2, np.asarray(<SameTypeAfterArraysStructComposite[:1]>&element).dtype) cdef SameTypeAfterArraysStructComposite[:] memview = arr + +ctypedef fused np_numeric_t: + np.float64_t + +def test_invalid_buffer_fused_memoryview(np_numeric_t[:] A): + """ + >>> import numpy as np + >>> zz = np.zeros([5], dtype='M') + >>> test_invalid_buffer_fused_memoryview(zz) + Traceback (most recent call last): + ... + TypeError: No matching signature found + """ + return + +ctypedef fused np_numeric_object_t: + np.float64_t[:] + object + +def test_valid_buffer_fused_memoryview(np_numeric_object_t A): + """ + >>> import numpy as np + >>> zz = np.zeros([5], dtype='M') + >>> test_valid_buffer_fused_memoryview(zz) + """ + return |