Internal change PiperOrigin-RevId: 1001019275
diff --git a/upb/message/convert_fuzz_test.cc b/upb/message/convert_fuzz_test.cc index 2c86d02..1278323 100644 --- a/upb/message/convert_fuzz_test.cc +++ b/upb/message/convert_fuzz_test.cc
@@ -615,6 +615,30 @@ 20), 372456973, 1140553636); } + +TEST(ConvertFuzz, ArbitraryMiniTableConvertFuzzRegression_b574481307) { + ArbitraryMiniTableConvertFuzz( + upb::fuzz::MiniTableFuzzInput{ + {"&", "", "%%%", "", ""}, {}, "#3", {0, 2884765147, 4294967295}}, + upb::fuzz::MiniTableFuzzInput{{"&"}, {}, "", {1}}, + std::string( + "\n{ppppppp`0\000ppppppppppppppppppuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu" + "uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuquuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu" + "uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu" + "uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu" + "\331uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu" + "uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu" + "uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu" + "uuuuuuuuuuuuu\010\010\010\010uuuuuuuuuuuuuuuuuuuyuuuuuuuuuuuuuuuuuuu" + "uuuuuuuuuuuuuuuuuusuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu\301\301" + "\301\301\301\301uuuuuu~uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu\215uuu" + "uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu" + "uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuppppppppppppppp\371\371\371pp\331:" + "\000\000p\n\nppppppppppppppppppuppppppppppppppppp\216ppppp\n\npppppp" + "pppppppppppppopppppppppppp)pppppppppp", + 858), + 623911074, 3917243171); +} } // namespace } // namespace upb
diff --git a/upb/test/fuzz_util.cc b/upb/test/fuzz_util.cc index ed39d18..6cd3204 100644 --- a/upb/test/fuzz_util.cc +++ b/upb/test/fuzz_util.cc
@@ -110,13 +110,11 @@ upb_MiniTableField* field = &ext->UPB_PRIVATE(field); if (upb_MiniTableField_CType(field) == kUpb_CType_Message) { auto mt = NextMiniTable(); - if (!mt) field->UPB_PRIVATE(descriptortype) = kUpb_FieldType_Int32; - upb_MiniTableExtension_SetSubMessage(ext, mt); + if (!mt || !upb_MiniTableExtension_SetSubMessage(ext, mt)) return false; } if (upb_MiniTableField_IsClosedEnum(field)) { auto et = NextEnumTable(); - if (!et) return false; - upb_MiniTableExtension_SetSubEnum(ext, et); + if (!et || !upb_MiniTableExtension_SetSubEnum(ext, et)) return false; } return true; } @@ -138,7 +136,7 @@ *exts = nullptr; return; } - upb_MiniTableSub sub; + upb_MiniTableSub sub = upb_MiniTableSub_FromMessage(nullptr); const upb_MiniTable* extendee = NextMiniTable(); if (!extendee) break; ptr = upb_MiniTableExtension_Init(ptr, end - ptr, ext, extendee, sub,