Author: Armin Rigo <ar...@tunes.org> Branch: py3.6 Changeset: r97200:9122fab2808f Date: 2019-08-17 08:43 +0200 http://bitbucket.org/pypy/pypy/changeset/9122fab2808f/
Log: hg merge default diff --git a/extra_tests/cffi_tests/cffi1/test_recompiler.py b/extra_tests/cffi_tests/cffi1/test_recompiler.py --- a/extra_tests/cffi_tests/cffi1/test_recompiler.py +++ b/extra_tests/cffi_tests/cffi1/test_recompiler.py @@ -2414,6 +2414,18 @@ assert ffi.sizeof(a[0]) == ffi.sizeof("unsigned") assert ffi.sizeof(b[0]) == ffi.sizeof(a[0]) +def test_struct_with_func_with_struct_pointer_arg(): + ffi = FFI() + ffi.cdef("""struct BinaryTree { + int (* CompareKey)(struct BinaryTree *tree); + };""") + lib = verify(ffi, "test_struct_with_func_with_struct_pointer_arg", """ + struct BinaryTree { + int (* CompareKey)(struct BinaryTree *tree); + }; + """) + ffi.new("struct BinaryTree *") + def test_struct_with_func_with_struct_arg(): ffi = FFI() ffi.cdef("""struct BinaryTree { diff --git a/extra_tests/test_json.py b/extra_tests/test_json.py --- a/extra_tests/test_json.py +++ b/extra_tests/test_json.py @@ -48,5 +48,10 @@ == '{"3": 4, "5": 6}' def test_boolean_as_dict_key(): + # In CPython 2.x, dumps({True:...}) gives {"True":...}. It should be + # "true" instead; it's a bug as far as I can tell. In 3.x it was fixed. + # BUT! if we call dumps() with sort_keys=True, then CPython (any version) + # gives "true" instead of "True". Surprize! + # I don't want to understand why, let's just not attempt to reproduce that. assert json.dumps({True: 5}) == '{"true": 5}' assert json.dumps({False: 5}) == '{"false": 5}' diff --git a/lib_pypy/_cffi_ssl/_cffi_src/build_openssl.py b/lib_pypy/_cffi_ssl/_cffi_src/build_openssl.py --- a/lib_pypy/_cffi_ssl/_cffi_src/build_openssl.py +++ b/lib_pypy/_cffi_ssl/_cffi_src/build_openssl.py @@ -20,7 +20,7 @@ windows_link_legacy_openssl = os.environ.get( "CRYPTOGRAPHY_WINDOWS_LINK_LEGACY_OPENSSL", None ) - if windows_link_legacy_openssl is None: + if 0 and windows_link_legacy_openssl is None: # Link against the 1.1.0 names libs = ["libssl", "libcrypto"] else: diff --git a/pypy/module/_cffi_backend/ctypefunc.py b/pypy/module/_cffi_backend/ctypefunc.py --- a/pypy/module/_cffi_backend/ctypefunc.py +++ b/pypy/module/_cffi_backend/ctypefunc.py @@ -128,6 +128,10 @@ return W_CTypePtrBase._fget(self, attrchar) def call(self, funcaddr, args_w): + if not funcaddr: + raise oefmt(self.space.w_RuntimeError, + "cannot call null function pointer from cdata '%s'", + self.name) if self.cif_descr: # regular case: this function does not take '...' arguments self = jit.promote(self) diff --git a/pypy/module/_cffi_backend/test/_backend_test_c.py b/pypy/module/_cffi_backend/test/_backend_test_c.py --- a/pypy/module/_cffi_backend/test/_backend_test_c.py +++ b/pypy/module/_cffi_backend/test/_backend_test_c.py @@ -4425,3 +4425,10 @@ float(cast(BBool, 42)) with pytest.raises(TypeError): complex(cast(BBool, 42)) + +def test_cannot_call_null_function_pointer(): + BInt = new_primitive_type("int") + BFunc = new_function_type((BInt, BInt), BInt, False) + f = cast(BFunc, 0) + with pytest.raises(RuntimeError): + f(40, 2) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit