Fix cgen for an_array[i .. j]
diff --git a/internal/cgen/expr.go b/internal/cgen/expr.go
index 50cc83a..713fbfe 100644
--- a/internal/cgen/expr.go
+++ b/internal/cgen/expr.go
@@ -222,9 +222,16 @@
 		}
 		if rhs != nil {
 			b.writes(comma)
+			if lhsIsArray && (mcv != nil) && (mcv.Sign() != 0) {
+				b.writeb('(')
+			}
 			if err := g.writeExpr(b, rhs, false, depth); err != nil {
 				return err
 			}
+			if lhsIsArray && (mcv != nil) && (mcv.Sign() != 0) {
+				b.writes(") - ")
+				b.writes(mcv.String())
+			}
 		}
 		if mhs != nil || rhs != nil {
 			b.writeb(')')
diff --git a/release/c/wuffs-unsupported-snapshot.c b/release/c/wuffs-unsupported-snapshot.c
index b73c8fd..cea2b1e 100644
--- a/release/c/wuffs-unsupported-snapshot.c
+++ b/release/c/wuffs-unsupported-snapshot.c
@@ -25495,7 +25495,7 @@
       } else {
         v_sel_ff = (v_selector & 255);
         v_movee = self->private_data.f_mtft[v_sel_ff];
-        wuffs_base__slice_u8__copy_from_slice(wuffs_base__slice_u8__subslice_j(wuffs_base__make_slice_u8((self->private_data.f_mtft) + 1, 255), (1 + v_sel_ff)), wuffs_base__slice_u8__subslice_j(wuffs_base__make_slice_u8(self->private_data.f_mtft, 256), v_sel_ff));
+        wuffs_base__slice_u8__copy_from_slice(wuffs_base__slice_u8__subslice_j(wuffs_base__make_slice_u8((self->private_data.f_mtft) + 1, 255), ((1 + v_sel_ff)) - 1), wuffs_base__slice_u8__subslice_j(wuffs_base__make_slice_u8(self->private_data.f_mtft, 256), v_sel_ff));
         self->private_data.f_mtft[0] = v_movee;
         self->private_data.f_huffman_selectors[v_i] = v_movee;
       }
@@ -25849,7 +25849,7 @@
         } else if (v_child < 1280) {
           v_child_ff = ((uint32_t)((v_child & 255)));
           v_output = ((uint32_t)(self->private_data.f_mtft[v_child_ff]));
-          wuffs_base__slice_u8__copy_from_slice(wuffs_base__slice_u8__subslice_j(wuffs_base__make_slice_u8((self->private_data.f_mtft) + 1, 255), (1 + v_child_ff)), wuffs_base__slice_u8__subslice_j(wuffs_base__make_slice_u8(self->private_data.f_mtft, 256), v_child_ff));
+          wuffs_base__slice_u8__copy_from_slice(wuffs_base__slice_u8__subslice_j(wuffs_base__make_slice_u8((self->private_data.f_mtft) + 1, 255), ((1 + v_child_ff)) - 1), wuffs_base__slice_u8__subslice_j(wuffs_base__make_slice_u8(self->private_data.f_mtft, 256), v_child_ff));
           self->private_data.f_mtft[0] = ((uint8_t)(v_output));
           self->private_data.f_bwt[v_bs] = v_output;
           if (v_bs >= self->private_impl.f_max_incl_block_size) {
diff --git a/test/c/std/bzip2.c b/test/c/std/bzip2.c
index 7ef3dba..5de3bef 100644
--- a/test/c/std/bzip2.c
+++ b/test/c/std/bzip2.c
@@ -69,6 +69,11 @@
 
 // ---------------- Golden Tests
 
+golden_test g_bzip2_256_bytes_gt = {
+    .want_filename = "test/data/256.bytes",
+    .src_filename = "test/data/256.bytes.bz2",
+};
+
 golden_test g_bzip2_midsummer_gt = {
     .want_filename = "test/data/midsummer.txt",
     .src_filename = "test/data/midsummer.txt.bz2",
@@ -126,6 +131,13 @@
 }
 
 const char*  //
+test_wuffs_bzip2_decode_256_bytes() {
+  CHECK_FOCUS(__func__);
+  return do_test_io_buffers(wuffs_bzip2_decode, &g_bzip2_256_bytes_gt,
+                            UINT64_MAX, UINT64_MAX);
+}
+
+const char*  //
 test_wuffs_bzip2_decode_midsummer() {
   CHECK_FOCUS(__func__);
   return do_test_io_buffers(wuffs_bzip2_decode, &g_bzip2_midsummer_gt,
@@ -179,6 +191,7 @@
 
 proc g_tests[] = {
 
+    test_wuffs_bzip2_decode_256_bytes,
     test_wuffs_bzip2_decode_interface,
     test_wuffs_bzip2_decode_midsummer,
     test_wuffs_bzip2_decode_pi,
diff --git a/test/data/256.bytes.bz2 b/test/data/256.bytes.bz2
new file mode 100644
index 0000000..fc61e6b
--- /dev/null
+++ b/test/data/256.bytes.bz2
Binary files differ