diff --git a/src/core/ext/filters/message_size/message_size_filter.c b/src/core/ext/filters/message_size/message_size_filter.c
index db0f0119053970d03c953ca02126f9e8ca45ab61..e3ffc41f905a8b7b9cfdfcfb476edc01f108f4e7 100644
--- a/src/core/ext/filters/message_size/message_size_filter.c
+++ b/src/core/ext/filters/message_size/message_size_filter.c
@@ -130,6 +130,8 @@ static void recv_message_ready(grpc_exec_ctx* exec_ctx, void* user_data,
       GRPC_ERROR_UNREF(new_error);
     }
     gpr_free(message_string);
+  } else {
+    GRPC_ERROR_REF(error);
   }
   // Invoke the next callback.
   grpc_closure_run(exec_ctx, calld->next_recv_message_ready, error);