1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include <pb_encode.h>
5 #include <pb_decode.h>
6 #include "extensions.pb.h"
7 #include "unittests.h"
8
write_string(pb_ostream_t * stream,const pb_field_t * field,void * const * arg)9 static bool write_string(pb_ostream_t *stream, const pb_field_t *field, void * const *arg)
10 {
11 return pb_encode_tag_for_field(stream, field) &&
12 pb_encode_string(stream, (const void*)"abc", 3);
13 }
14
main(int argc,char ** argv)15 int main(int argc, char **argv)
16 {
17 int status = 0;
18 uint8_t buffer[64];
19 pb_size_t msglen = 0;
20
21 {
22 pb_ostream_t stream = pb_ostream_from_buffer(buffer, sizeof(buffer));
23 pb_callback_t callback_def = {{0}};
24 pb_extension_t ext = {0};
25 BaseMessage msg = {0};
26
27 callback_def.funcs.encode = &write_string;
28 ext.type = &string_extension;
29 ext.dest = &callback_def;
30 msg.extensions = &ext;
31
32 TEST(pb_encode(&stream, BaseMessage_fields, &msg));
33
34 msglen = stream.bytes_written;
35 TEST(msglen > 3);
36 }
37
38 {
39 pb_istream_t stream = pb_istream_from_buffer(buffer, msglen);
40 pb_extension_t ext = {0};
41 BaseMessage msg = {0};
42
43 ext.type = &string_extension;
44 /* Note: ext.dest remains null to trigger bug #342 */
45 msg.extensions = &ext;
46
47 TEST(pb_decode(&stream, BaseMessage_fields, &msg));
48 }
49
50 return status;
51 }
52
53