diff --git a/Lib/test/test_array.py b/Lib/test/test_array.py
index 3dd4f6d..93c6cc0 100755
--- a/Lib/test/test_array.py
+++ b/Lib/test/test_array.py
@@ -723,22 +723,37 @@
     def test_buffer(self):
         a = array.array(self.typecode, self.example)
         m = memoryview(a)
-        b = bytes(m)
-        self.assertEqual(b, a.tostring())
-        self.assertEqual(b[0], a.tostring()[0])
-        # Resizing is forbidden when there are buffer exports
+        expected = m.tobytes()
+        self.assertEqual(a.tostring(), expected)
+        self.assertEqual(a.tostring()[0], expected[0])
+        # Resizing is forbidden when there are buffer exports.
+        # For issue 4509, we also check after each error that
+        # the array was not modified.
         self.assertRaises(BufferError, a.append, a[0])
+        self.assertEqual(m.tobytes(), expected)
         self.assertRaises(BufferError, a.extend, a[0:1])
+        self.assertEqual(m.tobytes(), expected)
         self.assertRaises(BufferError, a.remove, a[0])
+        self.assertEqual(m.tobytes(), expected)
+        self.assertRaises(BufferError, a.pop, 0)
+        self.assertEqual(m.tobytes(), expected)
         self.assertRaises(BufferError, a.fromlist, a.tolist())
+        self.assertEqual(m.tobytes(), expected)
         self.assertRaises(BufferError, a.fromstring, a.tostring())
+        self.assertEqual(m.tobytes(), expected)
         if self.typecode == 'u':
             self.assertRaises(BufferError, a.fromunicode, a.tounicode())
-        self.assertRaises(BufferError, operator.setitem, a, slice(0, 0), a)
-        self.assertRaises(BufferError, operator.delitem, a, 0)
-        self.assertRaises(BufferError, operator.delitem, a, slice(0, 1))
+            self.assertEqual(m.tobytes(), expected)
         self.assertRaises(BufferError, operator.imul, a, 2)
+        self.assertEqual(m.tobytes(), expected)
         self.assertRaises(BufferError, operator.imul, a, 0)
+        self.assertEqual(m.tobytes(), expected)
+        self.assertRaises(BufferError, operator.setitem, a, slice(0, 0), a)
+        self.assertEqual(m.tobytes(), expected)
+        self.assertRaises(BufferError, operator.delitem, a, 0)
+        self.assertEqual(m.tobytes(), expected)
+        self.assertRaises(BufferError, operator.delitem, a, slice(0, 1))
+        self.assertEqual(m.tobytes(), expected)
 
     def test_weakref(self):
         s = array.array(self.typecode, self.example)
@@ -767,26 +782,6 @@
         a = array.array('H', b"1234")
         self.assertEqual(len(a) * a.itemsize, 4)
 
-    def test_memoryview_no_resize(self):
-        # Test for issue 4509.
-        a = array.array(self.typecode, self.example)
-        m = memoryview(a)
-        expected = m.tobytes()
-        self.assertRaises(BufferError, a.pop, 0)
-        self.assertEqual(m.tobytes(), expected)
-        self.assertRaises(BufferError, a.remove, a[0])
-        self.assertEqual(m.tobytes(), expected)
-        self.assertRaises(BufferError, a.__setitem__, slice(0, 0), a)
-        self.assertEqual(m.tobytes(), expected)
-        self.assertRaises(BufferError, a.__delitem__, slice(0, len(a)))
-        self.assertEqual(m.tobytes(), expected)
-        self.assertRaises(BufferError, a.__imul__, 2)
-        self.assertEqual(m.tobytes(), expected)
-        self.assertRaises(BufferError, a.__iadd__, a)
-        self.assertEqual(m.tobytes(), expected)
-        self.assertRaises(BufferError, a.extend, a)
-        self.assertEqual(m.tobytes(), expected)
-
 
 class StringTest(BaseTest):
 
diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c
index 1dbe918..8f6ca39 100644
--- a/Modules/arraymodule.c
+++ b/Modules/arraymodule.c
@@ -1699,6 +1699,16 @@
 	if ((step > 0 && stop < start) ||
 	    (step < 0 && stop > start))
 		stop = start;
+
+	/* Issue #4509: If the array has exported buffers and the slice
+	   assignment would change the size of the array, fail early to make
+	   sure we don't modify it. */
+	if ((needed == 0 || slicelength != needed) && self->ob_exports > 0) {
+		PyErr_SetString(PyExc_BufferError, 
+			"cannot resize an array that is exporting buffers");
+		return -1;
+	}
+
 	if (step == 1) {
 		if (slicelength > needed) {
 			memmove(self->ob_item + (start + needed) * itemsize,
