Fix Base64 position wrap handling
diff --git a/c/enc/encode.c b/c/enc/encode.c
index 0d424c3..ac62a14 100644
--- a/c/enc/encode.c
+++ b/c/enc/encode.c
@@ -514,6 +514,7 @@
                                    int* dist_cache,
                                    size_t* storage_ix,
                                    uint8_t* storage) {
+  const uint32_t wrapped_last_flush_pos = WrapPosition(last_flush_pos);
   uint16_t last_bytes;
   uint8_t last_bytes_bits;
   ContextLut literal_context_lut = BROTLI_CONTEXT_LUT(literal_context_mode);
@@ -532,7 +533,7 @@
        CreateBackwardReferences is now unused. */
     memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0]));
     BrotliStoreUncompressedMetaBlock(is_last, data,
-                                     (size_t)last_flush_pos, mask, bytes,
+                                     wrapped_last_flush_pos, mask, bytes,
                                      storage_ix, storage);
     return;
   }
@@ -541,13 +542,13 @@
   last_bytes = (uint16_t)((storage[1] << 8) | storage[0]);
   last_bytes_bits = (uint8_t)(*storage_ix);
   if (params->quality <= MAX_QUALITY_FOR_STATIC_ENTROPY_CODES) {
-    BrotliStoreMetaBlockFast(m, data, (size_t)last_flush_pos,
+    BrotliStoreMetaBlockFast(m, data, wrapped_last_flush_pos,
                              bytes, mask, is_last, params,
                              commands, num_commands,
                              storage_ix, storage);
     if (BROTLI_IS_OOM(m)) return;
   } else if (params->quality < MIN_QUALITY_FOR_BLOCK_SPLIT) {
-    BrotliStoreMetaBlockTrivial(m, data, (size_t)last_flush_pos,
+    BrotliStoreMetaBlockTrivial(m, data, wrapped_last_flush_pos,
                                 bytes, mask, is_last, params,
                                 commands, num_commands,
                                 storage_ix, storage);
@@ -564,18 +565,18 @@
             BROTLI_ALLOC(m, uint32_t, 32 * (BROTLI_MAX_STATIC_CONTEXTS + 1));
         if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(arena)) return;
         DecideOverLiteralContextModeling(
-            data, (size_t)last_flush_pos, bytes, mask, params->quality,
+            data, wrapped_last_flush_pos, bytes, mask, params->quality,
             params->size_hint, &num_literal_contexts,
             &literal_context_map, arena);
         BROTLI_FREE(m, arena);
       }
-      BrotliBuildMetaBlockGreedy(m, data, (size_t)last_flush_pos, mask,
+      BrotliBuildMetaBlockGreedy(m, data, wrapped_last_flush_pos, mask,
           base64_regions, num_base64_regions,
           prev_byte, prev_byte2, literal_context_lut, num_literal_contexts,
           literal_context_map, commands, num_commands, &mb);
       if (BROTLI_IS_OOM(m)) return;
     } else {
-      BrotliBuildMetaBlock(m, data, (size_t)last_flush_pos, mask,
+      BrotliBuildMetaBlock(m, data, wrapped_last_flush_pos, mask,
                            base64_regions, num_base64_regions,
                            &block_params,
                            prev_byte, prev_byte2,
@@ -590,7 +591,7 @@
          for "Large Window Brotli" (32-bit). */
       BrotliOptimizeHistograms(block_params.dist.alphabet_size_limit, &mb);
     }
-    BrotliStoreMetaBlock(m, data, (size_t)last_flush_pos, bytes, mask,
+    BrotliStoreMetaBlock(m, data, wrapped_last_flush_pos, bytes, mask,
                          prev_byte, prev_byte2,
                          is_last,
                          &block_params,
@@ -608,7 +609,7 @@
     storage[1] = (uint8_t)(last_bytes >> 8);
     *storage_ix = last_bytes_bits;
     BrotliStoreUncompressedMetaBlock(is_last, data,
-                                     (size_t)last_flush_pos, mask,
+                                     wrapped_last_flush_pos, mask,
                                      bytes, storage_ix, storage);
   }
 }