summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatus Valo <matusvalo@users.noreply.github.com>2023-04-30 15:19:32 +0200
committerGitHub <noreply@github.com>2023-04-30 15:19:32 +0200
commit0d34008a1746827519589d2e85bc3f54819d47ca (patch)
tree740d6c6ecb9de2112fc06aea2bcb0f86bccc428e
parent10cf5f6e18dbce625d32407a857cc06dd2cec637 (diff)
downloadcython-0d34008a1746827519589d2e85bc3f54819d47ca.tar.gz
Catch ValueError when calling memoryview() to avoid leaking implementation details (GH-5406)
-rw-r--r--Cython/Compiler/FusedNode.py2
-rw-r--r--tests/memoryview/numpy_memoryview.pyx26
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