diff --git a/aom/aom_decoder.h b/aom/aom_decoder.h
index 458e3bb..56eff00 100644
--- a/aom/aom_decoder.h
+++ b/aom/aom_decoder.h
@@ -162,8 +162,7 @@
  *     buffer was too short.
  */
 aom_codec_err_t aom_codec_peek_stream_info(aom_codec_iface_t *iface,
-                                           const uint8_t *data,
-                                           unsigned int data_sz,
+                                           const uint8_t *data, size_t data_sz,
                                            aom_codec_stream_info_t *si);
 
 /*!\brief Return information about the current stream.
@@ -212,7 +211,7 @@
  *         for recoverability capabilities.
  */
 aom_codec_err_t aom_codec_decode(aom_codec_ctx_t *ctx, const uint8_t *data,
-                                 unsigned int data_sz, void *user_priv);
+                                 size_t data_sz, void *user_priv);
 
 /*!\brief Decoded frames iterator
  *
diff --git a/aom/internal/aom_codec_internal.h b/aom/internal/aom_codec_internal.h
index a633d4c..bff5a86 100644
--- a/aom/internal/aom_codec_internal.h
+++ b/aom/internal/aom_codec_internal.h
@@ -113,7 +113,7 @@
  *     Bitstream is parsable and stream information updated
  */
 typedef aom_codec_err_t (*aom_codec_peek_si_fn_t)(const uint8_t *data,
-                                                  unsigned int data_sz,
+                                                  size_t data_sz,
                                                   aom_codec_stream_info_t *si);
 
 /*!\brief Return information about the current stream.
@@ -195,7 +195,7 @@
  */
 typedef aom_codec_err_t (*aom_codec_decode_fn_t)(aom_codec_alg_priv_t *ctx,
                                                  const uint8_t *data,
-                                                 unsigned int data_sz,
+                                                 size_t data_sz,
                                                  void *user_priv);
 
 /*!\brief Decoded frames iterator
diff --git a/aom/src/aom_decoder.c b/aom/src/aom_decoder.c
index ecbf838..e0cec10 100644
--- a/aom/src/aom_decoder.c
+++ b/aom/src/aom_decoder.c
@@ -61,8 +61,7 @@
 }
 
 aom_codec_err_t aom_codec_peek_stream_info(aom_codec_iface_t *iface,
-                                           const uint8_t *data,
-                                           unsigned int data_sz,
+                                           const uint8_t *data, size_t data_sz,
                                            aom_codec_stream_info_t *si) {
   aom_codec_err_t res;
 
@@ -99,7 +98,7 @@
 }
 
 aom_codec_err_t aom_codec_decode(aom_codec_ctx_t *ctx, const uint8_t *data,
-                                 unsigned int data_sz, void *user_priv) {
+                                 size_t data_sz, void *user_priv) {
   aom_codec_err_t res;
 
   /* Sanity checks */
diff --git a/aomdec.c b/aomdec.c
index 361e211..ddfc3a5 100644
--- a/aomdec.c
+++ b/aomdec.c
@@ -797,8 +797,7 @@
 
         aom_usec_timer_start(&timer);
 
-        if (aom_codec_decode(&decoder, buf, (unsigned int)bytes_in_buffer,
-                             NULL)) {
+        if (aom_codec_decode(&decoder, buf, bytes_in_buffer, NULL)) {
           const char *detail = aom_codec_error_detail(&decoder);
           warn("Failed to decode frame %d: %s", frame_in,
                aom_codec_error(&decoder));
diff --git a/av1/av1_dx_iface.c b/av1/av1_dx_iface.c
index d514535..a3e2f2b 100644
--- a/av1/av1_dx_iface.c
+++ b/av1/av1_dx_iface.c
@@ -204,7 +204,7 @@
 }
 
 static aom_codec_err_t decoder_peek_si_internal(const uint8_t *data,
-                                                unsigned int data_sz,
+                                                size_t data_sz,
                                                 aom_codec_stream_info_t *si,
                                                 int *is_intra_only) {
   int intra_only_flag = 0;
@@ -275,8 +275,7 @@
   return AOM_CODEC_OK;
 }
 
-static aom_codec_err_t decoder_peek_si(const uint8_t *data,
-                                       unsigned int data_sz,
+static aom_codec_err_t decoder_peek_si(const uint8_t *data, size_t data_sz,
                                        aom_codec_stream_info_t *si) {
   return decoder_peek_si_internal(data, data_sz, si, NULL);
 }
@@ -459,7 +458,7 @@
 }
 
 static aom_codec_err_t decode_one(aom_codec_alg_priv_t *ctx,
-                                  const uint8_t **data, uint64_t data_sz,
+                                  const uint8_t **data, size_t data_sz,
                                   void *user_priv) {
   const AVxWorkerInterface *const winterface = aom_get_worker_interface();
 
@@ -469,8 +468,8 @@
   if (!ctx->si.h) {
     int is_intra_only = 0;
     ctx->si.is_annexb = ctx->is_annexb;
-    const aom_codec_err_t res = decoder_peek_si_internal(
-        *data, (unsigned int)data_sz, &ctx->si, &is_intra_only);
+    const aom_codec_err_t res =
+        decoder_peek_si_internal(*data, data_sz, &ctx->si, &is_intra_only);
     if (res != AOM_CODEC_OK) return res;
 
     if (!ctx->si.is_kf && !is_intra_only) return AOM_CODEC_ERROR;
@@ -509,7 +508,7 @@
 }
 
 static aom_codec_err_t decoder_decode(aom_codec_alg_priv_t *ctx,
-                                      const uint8_t *data, unsigned int data_sz,
+                                      const uint8_t *data, size_t data_sz,
                                       void *user_priv) {
   const uint8_t *data_start = data;
   const uint8_t *const data_end = data + data_sz;
@@ -555,7 +554,9 @@
       frame_size = (uint64_t)(data_end - data_start);
     }
 
-    res = decode_one(ctx, &data_start, frame_size, user_priv);
+    if (frame_size > UINT32_MAX) return AOM_CODEC_CORRUPT_FRAME;
+
+    res = decode_one(ctx, &data_start, (size_t)frame_size, user_priv);
     if (res != AOM_CODEC_OK) return res;
 
     // Allow extra zero bytes after the frame end
diff --git a/examples/decode_to_md5.c b/examples/decode_to_md5.c
index 75bb97d..0e108e2 100644
--- a/examples/decode_to_md5.c
+++ b/examples/decode_to_md5.c
@@ -110,7 +110,7 @@
     size_t frame_size = 0;
     const unsigned char *frame =
         aom_video_reader_get_frame(reader, &frame_size);
-    if (aom_codec_decode(&codec, frame, (unsigned int)frame_size, NULL))
+    if (aom_codec_decode(&codec, frame, frame_size, NULL))
       die_codec(&codec, "Failed to decode frame");
 
     while ((img = aom_codec_get_frame(&codec, &iter)) != NULL) {
diff --git a/examples/decode_with_drops.c b/examples/decode_with_drops.c
index 362f9ad..bd32c87 100644
--- a/examples/decode_with_drops.c
+++ b/examples/decode_with_drops.c
@@ -123,7 +123,7 @@
 
     if (!skip) {
       putc('.', stdout);
-      if (aom_codec_decode(&codec, frame, (unsigned int)frame_size, NULL))
+      if (aom_codec_decode(&codec, frame, frame_size, NULL))
         die_codec(&codec, "Failed to decode frame.");
 
       while ((img = aom_codec_get_frame(&codec, &iter)) != NULL)
diff --git a/examples/lightfield_decoder.c b/examples/lightfield_decoder.c
index b1a3921..0b52487 100644
--- a/examples/lightfield_decoder.c
+++ b/examples/lightfield_decoder.c
@@ -137,7 +137,7 @@
       size_t frame_size = 0;
       const unsigned char *frame =
           aom_video_reader_get_frame(reader, &frame_size);
-      if (aom_codec_decode(&codec, frame, (unsigned int)frame_size, NULL))
+      if (aom_codec_decode(&codec, frame, frame_size, NULL))
         die_codec(&codec, "Failed to decode frame.");
 
       while ((img = aom_codec_get_frame(&codec, &iter)) != NULL) {
diff --git a/examples/scalable_decoder.c b/examples/scalable_decoder.c
index 837f07a..37cf299 100644
--- a/examples/scalable_decoder.c
+++ b/examples/scalable_decoder.c
@@ -149,7 +149,7 @@
                                     &buffer_size)) {
     aom_codec_iter_t iter = NULL;
     aom_image_t *img = NULL;
-    if (aom_codec_decode(&codec, buf, (unsigned int)bytes_in_buffer, NULL))
+    if (aom_codec_decode(&codec, buf, bytes_in_buffer, NULL))
       die_codec(&codec, "Failed to decode frame.");
 
     while ((img = aom_codec_get_frame(&codec, &iter)) != NULL) {
diff --git a/examples/simple_decoder.c b/examples/simple_decoder.c
index e7c6a7d..a784f18 100644
--- a/examples/simple_decoder.c
+++ b/examples/simple_decoder.c
@@ -125,7 +125,7 @@
     size_t frame_size = 0;
     const unsigned char *frame =
         aom_video_reader_get_frame(reader, &frame_size);
-    if (aom_codec_decode(&codec, frame, (unsigned int)frame_size, NULL))
+    if (aom_codec_decode(&codec, frame, frame_size, NULL))
       die_codec(&codec, "Failed to decode frame.");
 
     while ((img = aom_codec_get_frame(&codec, &iter)) != NULL) {
diff --git a/test/decode_test_driver.cc b/test/decode_test_driver.cc
index 089cc9b..99a9e8d 100644
--- a/test/decode_test_driver.cc
+++ b/test/decode_test_driver.cc
@@ -22,8 +22,8 @@
 
 aom_codec_err_t Decoder::PeekStream(const uint8_t *cxdata, size_t size,
                                     aom_codec_stream_info_t *stream_info) {
-  return aom_codec_peek_stream_info(
-      CodecInterface(), cxdata, static_cast<unsigned int>(size), stream_info);
+  return aom_codec_peek_stream_info(CodecInterface(), cxdata, size,
+                                    stream_info);
 }
 
 aom_codec_err_t Decoder::DecodeFrame(const uint8_t *cxdata, size_t size) {
@@ -35,8 +35,7 @@
   aom_codec_err_t res_dec;
   InitOnce();
   API_REGISTER_STATE_CHECK(
-      res_dec = aom_codec_decode(&decoder_, cxdata,
-                                 static_cast<unsigned int>(size), user_priv));
+      res_dec = aom_codec_decode(&decoder_, cxdata, size, user_priv));
   return res_dec;
 }
 
