Propagate aliasing option to parse of unknown fields
No implementation hooked up yet.
PiperOrigin-RevId: 698144846
diff --git a/upb/message/copy.c b/upb/message/copy.c
index e9c5f61..32d71be 100644
--- a/upb/message/copy.c
+++ b/upb/message/copy.c
@@ -286,7 +286,7 @@
while (upb_Message_NextUnknown(src, &unknowns, &iter)) {
// Make a copy into destination arena.
if (!UPB_PRIVATE(_upb_Message_AddUnknown)(dst, unknowns.data, unknowns.size,
- arena)) {
+ arena, false)) {
return NULL;
}
}
diff --git a/upb/message/copy_test.cc b/upb/message/copy_test.cc
index af0c4a9..d6fe9aa 100644
--- a/upb/message/copy_test.cc
+++ b/upb/message/copy_test.cc
@@ -314,7 +314,7 @@
std::string unknown_data(data, len);
// Add unknown data.
UPB_PRIVATE(_upb_Message_AddUnknown)
- (UPB_UPCAST(msg), data, len, source_arena);
+ (UPB_UPCAST(msg), data, len, source_arena, false);
// Create clone.
upb_Arena* clone_arena = upb_Arena_New();
protobuf_test_messages_proto2_TestAllTypesProto2* clone =
diff --git a/upb/message/internal/compare_unknown_test.cc b/upb/message/internal/compare_unknown_test.cc
index d655f66..2d8c32c 100644
--- a/upb/message/internal/compare_unknown_test.cc
+++ b/upb/message/internal/compare_unknown_test.cc
@@ -116,9 +116,9 @@
std::string buf1 = ToBinaryPayload(uf1);
std::string buf2 = ToBinaryPayload(uf2);
UPB_PRIVATE(_upb_Message_AddUnknown)(UPB_UPCAST(msg1), buf1.data(),
- buf1.size(), arena1.ptr());
+ buf1.size(), arena1.ptr(), false);
UPB_PRIVATE(_upb_Message_AddUnknown)(UPB_UPCAST(msg2), buf2.data(),
- buf2.size(), arena2.ptr());
+ buf2.size(), arena2.ptr(), false);
return UPB_PRIVATE(_upb_Message_UnknownFieldsAreEqual)(
UPB_UPCAST(msg1), UPB_UPCAST(msg2), max_depth);
}
diff --git a/upb/message/internal/message.h b/upb/message/internal/message.h
index 8f1b09b..2f7f0fa 100644
--- a/upb/message/internal/message.h
+++ b/upb/message/internal/message.h
@@ -88,7 +88,7 @@
// The data is copied into the message instance.
bool UPB_PRIVATE(_upb_Message_AddUnknown)(struct upb_Message* msg,
const char* data, size_t len,
- upb_Arena* arena);
+ upb_Arena* arena, bool alias);
// Adds unknown data (serialized protobuf data) to the given message.
// The data is copied into the message instance. Data when concatenated together
diff --git a/upb/message/message.c b/upb/message/message.c
index b4ce505..6ac5788 100644
--- a/upb/message/message.c
+++ b/upb/message/message.c
@@ -37,7 +37,8 @@
}
bool UPB_PRIVATE(_upb_Message_AddUnknown)(upb_Message* msg, const char* data,
- size_t len, upb_Arena* arena) {
+ size_t len, upb_Arena* arena,
+ bool alias) {
UPB_ASSERT(!upb_Message_IsFrozen(msg));
// TODO: b/376969853 - Add debug check that the unknown field is an overall
// valid proto field
diff --git a/upb/wire/decode.c b/upb/wire/decode.c
index 4818b7d..55e62eb 100644
--- a/upb/wire/decode.c
+++ b/upb/wire/decode.c
@@ -402,7 +402,7 @@
end = upb_Decoder_EncodeVarint32(v, end);
if (!UPB_PRIVATE(_upb_Message_AddUnknown)(unknown_msg, buf, end - buf,
- &d->arena)) {
+ &d->arena, false)) {
_upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
}
return false;
@@ -1265,8 +1265,9 @@
// bounds checks are needed before adding the unknown field.
_upb_Decoder_IsDone(d, &ptr);
const char* input_ptr = upb_EpsCopyInputStream_GetInputPtr(&d->input, ptr);
- if (!UPB_PRIVATE(_upb_Message_AddUnknown)(
- msg, input_start, input_ptr - input_start, &d->arena)) {
+ if (!UPB_PRIVATE(_upb_Message_AddUnknown)(msg, input_start,
+ input_ptr - input_start,
+ &d->arena, d->input.aliasing)) {
_upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
}
} else if (wire_type == kUpb_WireType_StartGroup) {