Disable fasttable when executing 32bit decoder on 64bit cpu.

PiperOrigin-RevId: 955047292
This commit is contained in:
Protobuf Team Bot 2026-07-27 23:12:26 -07:00 committed by Copybara-Service
parent 1e4949d09b
commit efa7be94db
2 changed files with 24 additions and 2 deletions

View file

@ -824,8 +824,11 @@ done:
#if UPB_FASTTABLE
upb_DecodeFast_TableEntry fasttable[32];
int fasttable_size = upb_DecodeFast_BuildTable(&decoder->table, fasttable);
mt_size += fasttable_size * sizeof(fasttable[0]);
int fasttable_size = 0;
if (decoder->platform == kUpb_MiniTablePlatform_64Bit) {
fasttable_size = upb_DecodeFast_BuildTable(&decoder->table, fasttable);
mt_size += fasttable_size * sizeof(fasttable[0]);
}
#endif
upb_MiniTable* ret = upb_Arena_Malloc(decoder->arena, mt_size);

View file

@ -339,3 +339,22 @@ TEST_P(MiniTableTest, Extendible) {
EXPECT_EQ(kUpb_ExtMode_Extendable,
table->UPB_PRIVATE(ext) & kUpb_ExtMode_Extendable);
}
TEST(MiniTableTest, Build32BitMiniTableWithSubmessagesNoFastTableAssert) {
upb::Arena arena;
upb::MtDataEncoder e;
ASSERT_TRUE(e.StartMessage(0));
ASSERT_TRUE(e.PutField(kUpb_FieldType_Message, 1, 0));
ASSERT_TRUE(e.PutField(kUpb_FieldType_Message, 2, 0));
ASSERT_TRUE(e.PutField(kUpb_FieldType_Message, 3, 0));
upb::Status status;
upb_MiniTable* table = _upb_MiniTable_Build(e.data().data(), e.data().size(),
kUpb_MiniTablePlatform_32Bit,
arena.ptr(), status.ptr());
ASSERT_NE(nullptr, table) << status.error_message();
EXPECT_EQ(3, upb_MiniTable_FieldCount(table));
EXPECT_EQ(0xff, table->UPB_PRIVATE(table_mask));
}