|
@@ -1167,6 +1167,7 @@ static void putrawmsg(MessageHeader* msg, const Descriptor* desc,
|
|
upb_msg_field_next(&i)) {
|
|
upb_msg_field_next(&i)) {
|
|
upb_fielddef* f = upb_msg_iter_field(&i);
|
|
upb_fielddef* f = upb_msg_iter_field(&i);
|
|
uint32_t offset = desc->layout->fields[upb_fielddef_index(f)].offset;
|
|
uint32_t offset = desc->layout->fields[upb_fielddef_index(f)].offset;
|
|
|
|
+ bool containing_oneof = false;
|
|
|
|
|
|
if (upb_fielddef_containingoneof(f)) {
|
|
if (upb_fielddef_containingoneof(f)) {
|
|
uint32_t oneof_case_offset =
|
|
uint32_t oneof_case_offset =
|
|
@@ -1179,6 +1180,7 @@ static void putrawmsg(MessageHeader* msg, const Descriptor* desc,
|
|
}
|
|
}
|
|
// Otherwise, fall through to the appropriate singular-field handler
|
|
// Otherwise, fall through to the appropriate singular-field handler
|
|
// below.
|
|
// below.
|
|
|
|
+ containing_oneof = true;
|
|
}
|
|
}
|
|
|
|
|
|
if (is_map_field(f)) {
|
|
if (is_map_field(f)) {
|
|
@@ -1209,7 +1211,7 @@ static void putrawmsg(MessageHeader* msg, const Descriptor* desc,
|
|
#define T(upbtypeconst, upbtype, ctype, default_value) \
|
|
#define T(upbtypeconst, upbtype, ctype, default_value) \
|
|
case upbtypeconst: { \
|
|
case upbtypeconst: { \
|
|
ctype value = DEREF(message_data(msg), offset, ctype); \
|
|
ctype value = DEREF(message_data(msg), offset, ctype); \
|
|
- if (value != default_value) { \
|
|
|
|
|
|
+ if (containing_oneof || value != default_value) { \
|
|
upb_sink_put##upbtype(sink, sel, value); \
|
|
upb_sink_put##upbtype(sink, sel, value); \
|
|
} \
|
|
} \
|
|
} break;
|
|
} break;
|