Skip to content

Commit

Permalink
Ensure the appropriate upb functions taking non-const pointers assert…
Browse files Browse the repository at this point in the history
… that the message is not frozen.

Fixes message/promote.c and internal/extension.c.

PiperOrigin-RevId: 628095780
  • Loading branch information
honglooker authored and copybara-github committed Apr 25, 2024
1 parent 7a1c926 commit e0fc566
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 0 deletions.
1 change: 1 addition & 0 deletions upb/message/internal/extension.c
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ const upb_Extension* UPB_PRIVATE(_upb_Message_Getexts)(

upb_Extension* UPB_PRIVATE(_upb_Message_GetOrCreateExtension)(
struct upb_Message* msg, const upb_MiniTableExtension* e, upb_Arena* a) {
UPB_ASSERT(!upb_Message_IsFrozen(msg));
upb_Extension* ext = (upb_Extension*)UPB_PRIVATE(_upb_Message_Getext)(msg, e);
if (ext) return ext;
if (!UPB_PRIVATE(_upb_Message_Realloc)(msg, sizeof(upb_Extension), a))
Expand Down
7 changes: 7 additions & 0 deletions upb/message/promote.c
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ static upb_UnknownToMessageRet upb_MiniTable_ParseUnknownMessage(
upb_GetExtension_Status upb_Message_GetOrPromoteExtension(
upb_Message* msg, const upb_MiniTableExtension* ext_table,
int decode_options, upb_Arena* arena, upb_MessageValue* value) {
UPB_ASSERT(!upb_Message_IsFrozen(msg));
UPB_ASSERT(upb_MiniTableExtension_CType(ext_table) == kUpb_CType_Message);
const upb_Extension* extension =
UPB_PRIVATE(_upb_Message_Getext)(msg, ext_table);
Expand Down Expand Up @@ -177,6 +178,7 @@ upb_DecodeStatus upb_Message_PromoteMessage(upb_Message* parent,
int decode_options,
upb_Arena* arena,
upb_Message** promoted) {
UPB_ASSERT(!upb_Message_IsFrozen(parent));
const upb_MiniTable* sub_table =
upb_MiniTable_GetSubMessageTable(mini_table, field);
UPB_ASSERT(sub_table);
Expand Down Expand Up @@ -233,6 +235,7 @@ upb_UnknownToMessageRet upb_MiniTable_PromoteUnknownToMessage(
upb_Message* msg, const upb_MiniTable* mini_table,
const upb_MiniTableField* field, const upb_MiniTable* sub_mini_table,
int decode_options, upb_Arena* arena) {
UPB_ASSERT(!upb_Message_IsFrozen(msg));
upb_FindUnknownRet unknown;
// We need to loop and merge unknowns that have matching tag field->number.
upb_Message* message = NULL;
Expand Down Expand Up @@ -292,6 +295,8 @@ upb_UnknownToMessageRet upb_MiniTable_PromoteUnknownToMessage(
upb_UnknownToMessage_Status upb_MiniTable_PromoteUnknownToMessageArray(
upb_Message* msg, const upb_MiniTableField* field,
const upb_MiniTable* mini_table, int decode_options, upb_Arena* arena) {
UPB_ASSERT(!upb_Message_IsFrozen(msg));

upb_Array* repeated_messages = upb_Message_GetMutableArray(msg, field);
// Find all unknowns with given field number and parse.
upb_FindUnknownRet unknown;
Expand Down Expand Up @@ -327,6 +332,8 @@ upb_UnknownToMessage_Status upb_MiniTable_PromoteUnknownToMessageArray(
upb_UnknownToMessage_Status upb_MiniTable_PromoteUnknownToMap(
upb_Message* msg, const upb_MiniTable* mini_table,
const upb_MiniTableField* field, int decode_options, upb_Arena* arena) {
UPB_ASSERT(!upb_Message_IsFrozen(msg));

const upb_MiniTable* map_entry_mini_table =
upb_MiniTable_MapEntrySubMessage(mini_table, field);
UPB_ASSERT(upb_MiniTable_FieldCount(map_entry_mini_table) == 2);
Expand Down

0 comments on commit e0fc566

Please sign in to comment.