Author: Armin Rigo <ar...@tunes.org> Branch: Changeset: r2333:2a9a1726dae3 Date: 2015-10-09 09:58 +0200 http://bitbucket.org/cffi/cffi/changeset/2a9a1726dae3/
Log: Test and fix: a negative size was implicitly converted to a huge size_t number diff --git a/c/_cffi_backend.c b/c/_cffi_backend.c --- a/c/_cffi_backend.c +++ b/c/_cffi_backend.c @@ -5822,6 +5822,10 @@ if (!PyArg_ParseTupleAndKeywords(args, kwds, "OOn", keywords, &dest_obj, &src_obj, &n)) return NULL; + if (n < 0) { + PyErr_SetString(PyExc_ValueError, "negative size"); + return NULL; + } if (_fetch_as_buffer(src_obj, &src_view, 0) < 0) { return NULL; diff --git a/c/test_c.py b/c/test_c.py --- a/c/test_c.py +++ b/c/test_c.py @@ -3450,7 +3450,6 @@ assert b.tolist() == [-997, -996, 995] def test_memmove_readonly_readwrite(): - ffi = FFI() SignedChar = new_primitive_type("signed char") SignedCharA = new_array_type(new_pointer_type(SignedChar), None) p = newp(SignedCharA, 5) @@ -3463,6 +3462,12 @@ memmove(dest=ba, src=p, n=3) assert ba == bytearray(b"ABcxx") +def test_memmove_sign_check(): + SignedChar = new_primitive_type("signed char") + SignedCharA = new_array_type(new_pointer_type(SignedChar), None) + p = newp(SignedCharA, 5) + py.test.raises(ValueError, memmove, p, p + 1, -1) # not segfault + def test_dereference_null_ptr(): BInt = new_primitive_type("int") BIntPtr = new_pointer_type(BInt) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit