Skip to content

Commit 32a039a

Browse files
adazhcopybara-github
authored andcommitted
Pass the starting buffer pointer for the backalloc to _upb_Encode_Field and _upb_Encode_Extension.
PiperOrigin-RevId: 912682505
1 parent 890ffb9 commit 32a039a

3 files changed

Lines changed: 12 additions & 13 deletions

File tree

upb/wire/encode.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -848,15 +848,14 @@ upb_EncodeStatus upb_Encode(const upb_Message* msg, const upb_MiniTable* l,
848848
return _upb_Encode(msg, l, options, arena, buf, size, false);
849849
}
850850

851-
upb_EncodeStatus UPB_PRIVATE(_upb_Encode_Field)(upb_encstate* e,
851+
upb_EncodeStatus UPB_PRIVATE(_upb_Encode_Field)(char* ptr, upb_encstate* e,
852852
const upb_Message* msg,
853853
const upb_MiniTableField* field,
854854
char** buf, size_t* size,
855855
int options) {
856856
e->options = options;
857857
e->depth = upb_EncodeOptions_GetEffectiveMaxDepth(options);
858858

859-
char* ptr = e->alloc.limit;
860859
if (encode_shouldencode(msg, field)) {
861860
ptr = encode_field(ptr, e, msg, field);
862861
}
@@ -866,13 +865,12 @@ upb_EncodeStatus UPB_PRIVATE(_upb_Encode_Field)(upb_encstate* e,
866865
}
867866

868867
upb_EncodeStatus UPB_PRIVATE(_upb_Encode_Extension)(
869-
upb_encstate* e, const upb_MiniTableExtension* ext,
868+
char* ptr, upb_encstate* e, const upb_MiniTableExtension* ext,
870869
upb_MessageValue ext_val, bool is_message_set, char** buf, size_t* size,
871870
int options) {
872871
e->options = options;
873872
e->depth = upb_EncodeOptions_GetEffectiveMaxDepth(options);
874873

875-
char* ptr = e->alloc.limit;
876874
ptr = encode_ext(ptr, e, ext, ext_val, is_message_set);
877875
*size = upb_BackAlloc_Finish(&e->alloc, ptr);
878876
*buf = ptr;

upb/wire/encode_test.cc

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ static void DoEncodeFieldMaxDepthExceeded(jmp_buf err, upb_encstate& e,
2727
const upb_MiniTableField* field,
2828
char*& buf, size_t& size) {
2929
if (UPB_SETJMP(err) == 0) {
30-
UPB_PRIVATE(_upb_Encode_Field)(&e, msg, field, &buf, &size, e.options);
30+
UPB_PRIVATE(_upb_Encode_Field)(e.alloc.limit, &e, msg, field, &buf, &size,
31+
e.options);
3132
FAIL() << "Should have jumped";
3233
} else {
3334
EXPECT_EQ(e.status, kUpb_EncodeStatus_MaxDepthExceeded);
@@ -39,8 +40,8 @@ static void DoEncodeExtensionMaxDepthExceeded(jmp_buf err, upb_encstate& e,
3940
upb_MessageValue ext_val,
4041
char*& buf, size_t& size) {
4142
if (UPB_SETJMP(err) == 0) {
42-
UPB_PRIVATE(_upb_Encode_Extension)(&e, ext, ext_val, false, &buf, &size,
43-
e.options);
43+
UPB_PRIVATE(_upb_Encode_Extension)(e.alloc.limit, &e, ext, ext_val, false,
44+
&buf, &size, e.options);
4445
FAIL() << "Should have jumped";
4546
} else {
4647
EXPECT_EQ(e.status, kUpb_EncodeStatus_MaxDepthExceeded);
@@ -63,7 +64,7 @@ TEST(EncodeTest, EncodeFieldSuccess) {
6364
char* buf;
6465
size_t size;
6566
upb_EncodeStatus status = UPB_PRIVATE(_upb_Encode_Field)(
66-
&e, (upb_Message*)msg, field, &buf, &size, e.options);
67+
e.alloc.limit, &e, (upb_Message*)msg, field, &buf, &size, e.options);
6768
EXPECT_EQ(status, kUpb_EncodeStatus_Ok);
6869
EXPECT_GT(size, 0);
6970

@@ -94,7 +95,7 @@ TEST(EncodeTest, EncodeFieldSuccessEmptyMessage) {
9495
char* buf;
9596
size_t size;
9697
upb_EncodeStatus status = UPB_PRIVATE(_upb_Encode_Field)(
97-
&e, (upb_Message*)msg, field, &buf, &size, e.options);
98+
e.alloc.limit, &e, (upb_Message*)msg, field, &buf, &size, e.options);
9899
EXPECT_EQ(status, kUpb_EncodeStatus_Ok);
99100
EXPECT_EQ(size, 0);
100101

@@ -139,7 +140,7 @@ TEST(EncodeTest, EncodeExtensionSuccess) {
139140
char* buf;
140141
size_t size;
141142
upb_EncodeStatus status = UPB_PRIVATE(_upb_Encode_Extension)(
142-
&e, ext, ext_val, false, &buf, &size, e.options);
143+
e.alloc.limit, &e, ext, ext_val, false, &buf, &size, e.options);
143144
EXPECT_EQ(status, kUpb_EncodeStatus_Ok);
144145
EXPECT_GT(size, 0);
145146

@@ -175,7 +176,7 @@ TEST(EncodeTest, EncodeExtensionSuccessEmptyMessage) {
175176
char* buf;
176177
size_t size;
177178
upb_EncodeStatus status = UPB_PRIVATE(_upb_Encode_Extension)(
178-
&e, ext, ext_val, false, &buf, &size, e.options);
179+
e.alloc.limit, &e, ext, ext_val, false, &buf, &size, e.options);
179180
EXPECT_EQ(status, kUpb_EncodeStatus_Ok);
180181
EXPECT_GT(size, 0);
181182

upb/wire/internal/encoder.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ UPB_INLINE char* UPB_PRIVATE(_upb_encstate_init)(upb_encstate* e, jmp_buf* err,
5151
//
5252
// The caller must clean up the `upb_encstate` by calling
5353
// `_upb_mapsorter_destroy(&e->sorter)` when done.
54-
upb_EncodeStatus UPB_PRIVATE(_upb_Encode_Field)(upb_encstate* e,
54+
upb_EncodeStatus UPB_PRIVATE(_upb_Encode_Field)(char* ptr, upb_encstate* e,
5555
const upb_Message* msg,
5656
const upb_MiniTableField* field,
5757
char** buf, size_t* size,
@@ -62,7 +62,7 @@ upb_EncodeStatus UPB_PRIVATE(_upb_Encode_Field)(upb_encstate* e,
6262
// The caller must clean up the `upb_encstate` by calling
6363
// `_upb_mapsorter_destroy(&e->sorter)` when done.
6464
upb_EncodeStatus UPB_PRIVATE(_upb_Encode_Extension)(
65-
upb_encstate* e, const upb_MiniTableExtension* ext,
65+
char* ptr, upb_encstate* e, const upb_MiniTableExtension* ext,
6666
upb_MessageValue ext_val, bool is_message_set, char** buf, size_t* size,
6767
int options);
6868

0 commit comments

Comments
 (0)