Fixed slice assignment of unequal length.
diff --git a/python/pb_unit_tests/reflection_test_wrapper.py b/python/pb_unit_tests/reflection_test_wrapper.py
index 7969aba..8f7d48f 100644
--- a/python/pb_unit_tests/reflection_test_wrapper.py
+++ b/python/pb_unit_tests/reflection_test_wrapper.py
@@ -35,7 +35,6 @@
 reflection_test.Proto2ReflectionTest.testRepeatedCompositeReverse_Empty.__unittest_expecting_failure__ = True
 reflection_test.Proto2ReflectionTest.testRepeatedCompositeReverse_NonEmpty.__unittest_expecting_failure__ = True
 reflection_test.Proto2ReflectionTest.testRepeatedListExtensions.__unittest_expecting_failure__ = True
-reflection_test.Proto2ReflectionTest.testRepeatedScalars.__unittest_expecting_failure__ = True
 reflection_test.Proto2ReflectionTest.testRepeatedScalarsReverse_Empty.__unittest_expecting_failure__ = True
 reflection_test.Proto2ReflectionTest.testRepeatedScalarsReverse_NonEmpty.__unittest_expecting_failure__ = True
 reflection_test.Proto2ReflectionTest.testSingularListExtensions.__unittest_expecting_failure__ = True
diff --git a/python/repeated.c b/python/repeated.c
index 1b32fd4..b758bef 100644
--- a/python/repeated.c
+++ b/python/repeated.c
@@ -359,12 +359,21 @@
   PyObject* item = NULL;
   int ret = -1;
   if (!seq) goto err;
-  if (PySequence_Size(seq) != count) {
-    PyErr_Format(PyExc_ValueError,
-                  "attempt to assign sequence of size %zd to extended slice "
-                  "of size %zd",
-                  PySequence_Size(seq), count);
-    goto err;
+  Py_ssize_t seq_size = PySequence_Size(seq);
+  if (seq_size != count) {
+    if (step == 1) {
+      // We must shift the tail elements (either right or left).
+      size_t tail = upb_array_size(arr) - (idx + count);
+      upb_array_resize(arr, idx + seq_size + tail, arena);
+      upb_array_move(arr, idx + seq_size, idx + count, tail);
+      count = seq_size;
+    } else {
+      PyErr_Format(PyExc_ValueError,
+                   "attempt to assign sequence of  %zd to extended slice "
+                   "of size %zd",
+                   seq_size, count);
+      goto err;
+    }
   }
   for (Py_ssize_t i = 0; i < count; i++, idx += step) {
     upb_msgval msgval;