Guard deep copy sub table check from other uses of submsg_index.
When copying array items only access and pass sub table if field type is message.

PiperOrigin-RevId: 523268010
diff --git a/upb/message/copy.c b/upb/message/copy.c
index 3f2c607..7fc0795 100644
--- a/upb/message/copy.c
+++ b/upb/message/copy.c
@@ -149,7 +149,7 @@
   if (!_upb_Array_ResizeUninitialized(cloned_array, size, arena)) {
     return NULL;
   }
-  for (int i = 0; i < size; ++i) {
+  for (size_t i = 0; i < size; ++i) {
     upb_MessageValue val = upb_Array_Get(array, i);
     if (!upb_Clone_MessageValue(&val, value_type, sub, arena)) {
       return false;
@@ -166,7 +166,8 @@
   _upb_MiniTableField_CheckIsArray(field);
   upb_Array* cloned_array = upb_Array_DeepClone(
       array, upb_MiniTableField_CType(field),
-      field->UPB_PRIVATE(submsg_index) != kUpb_NoSub
+      upb_MiniTableField_CType(field) == kUpb_CType_Message &&
+              field->UPB_PRIVATE(submsg_index) != kUpb_NoSub
           ? upb_MiniTable_GetSubMessageTable(mini_table, field)
           : NULL,
       arena);