diff --git a/py/gc.c b/py/gc.c
index 2930e9011071e890f8ebb9c47c3eb7f5ac4013ec..9a5f9d89bf96583462055ffcd681d60b8fa8a92e 100644
--- a/py/gc.c
+++ b/py/gc.c
@@ -480,7 +480,7 @@ void *gc_realloc(void *ptr_in, machine_uint_t n_bytes) {
     }
 
     // compute number of new blocks that are requested
-    machine_uint_t new_blocks = (n_bytes + BYTES_PER_BLOCK) / BYTES_PER_BLOCK;
+    machine_uint_t new_blocks = (n_bytes + BYTES_PER_BLOCK - 1) / BYTES_PER_BLOCK;
 
     // get the number of consecutive tail blocks and
     // the number of free blocks after last tail block
diff --git a/py/objarray.c b/py/objarray.c
index b7a84ba4cf6e215f683c0c6f6610f1e08b7a16f8..ce107ddf2508e4b56ef8f97e26e1fe0c8d86820f 100644
--- a/py/objarray.c
+++ b/py/objarray.c
@@ -136,10 +136,18 @@ STATIC mp_obj_t array_subscr(mp_obj_t self_in, mp_obj_t index_in, mp_obj_t value
     if (value == MP_OBJ_NULL) {
         // delete item
         // TODO implement
+        // TODO: confirmed that both bytearray and array.array support
+        // slice deletion
         return MP_OBJ_NOT_SUPPORTED;
     } else {
         mp_obj_array_t *o = self_in;
         if (MP_OBJ_IS_TYPE(index_in, &mp_type_slice)) {
+            if (value != MP_OBJ_SENTINEL) {
+                // Only getting a slice is suported so far, not assignment
+                // TODO: confirmed that both bytearray and array.array support
+                // slice assignment (incl. of different size)
+                return MP_OBJ_NOT_SUPPORTED;
+            }
             machine_uint_t start, stop;
             if (!m_seq_get_fast_slice_indexes(o->len, index_in, &start, &stop)) {
                 assert(0);