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);