Set the defaults properly for newly allocated submessages.

Also, pb_dec_submessage() should have used calloc() instead of malloc()
in the first place.

git-svn-id: https://svn.kapsi.fi/jpa/nanopb-dev@1083 e3a754e5-d11d-0410-8d38-ebb782a927b9
This commit is contained in:
Michael Poole
2011-12-20 03:54:57 +00:00
committed by Petteri Aimonen
parent f7c8dd81d4
commit ba93b65e9f
5 changed files with 17 additions and 12 deletions

View File

@@ -287,12 +287,12 @@ int main()
memset(&dest, 0, sizeof(dest));
#ifdef MALLOC_HEADER
TEST((s = S("\x0A\x01\x61\x12\x01\x62\x2A\x01\x65\x32\x01\x66\x3A\x00"
"\x42\x01\x63\x4A\x01\x64"),
TEST((s = S("\x0A\x01\x61\x12\x01\x62\x1A\x00\x2A\x01\x65\x32\x01\x66"
"\x3A\x00\x42\x01\x63\x4A\x01\x64"),
pb_decode(&s, PointerContainer_msg, &dest)))
TEST(0 == strcmp(dest.text, "a"))
TEST(dest.blob.size == 1 && dest.blob.bytes[0] == 'b')
TEST(dest.submsg == NULL)
TEST(dest.submsg != NULL && dest.submsg->data == 10)
TEST(dest.rtext_count == 1 && (0 == strcmp(dest.rtext[0], "e")))
TEST(dest.rblob_count == 1 && dest.rblob[0].size == 1 &&
dest.rblob[0].bytes[0] == 'f')
@@ -301,8 +301,8 @@ int main()
TEST(dest.oblob.size == 1 && dest.oblob.bytes[0] == 'd')
TEST(pb_clean(PointerContainer_msg, &dest));
#else
TEST((s = S("\x0A\x01\x61\x12\x01\x62\x2A\x01\x65\x32\x01\x66\x3A\x00"
"\x42\x01\x63\x4A\x01\x64"),
TEST((s = S("\x0A\x01\x61\x12\x01\x62\x2A\x01\x65\x32\x01\x66\x01\x66"
"\x3A\x00\x42\x01\x63\x4A\x01\x64"),
!pb_decode(&s, PointerContainer_msg, &dest)))
#endif
}

View File

@@ -273,7 +273,7 @@ int main()
uint8_t buffer[128];
pb_ostream_t s;
PointerContainer msg;
PointerContainer msg2;
DefaultContainer msg2;
IntegerArray msg3;
COMMENT("Test pb_encode with pointer fields.")
@@ -285,7 +285,7 @@ int main()
msg.blob.bytes = (uint8_t*)"b";
msg.submsg = &msg2;
TEST(WRITES(pb_encode(&s, PointerContainer_msg, &msg),
"\x0A\x01\x61\x12\x01\x62"))
"\x0A\x01\x61\x12\x01\x62\x1A\x00"))
memset(&msg3, 0, sizeof(msg3));
msg.rtext_count = 1;
@@ -296,7 +296,7 @@ int main()
msg.rsubmsg_count = 1;
msg.rsubmsg[0] = &msg3;
TEST(WRITES(pb_encode(&s, PointerContainer_msg, &msg),
"\x0A\x01\x61\x12\x01\x62"
"\x0A\x01\x61\x12\x01\x62\x1A\x00"
"\x2A\x01\x65\x32\x01\x66\x3A\x00"));
PointerContainer_set(msg, otext);
@@ -305,7 +305,7 @@ int main()
msg.oblob.size = 1;
msg.oblob.bytes = (uint8_t*)"d";
TEST(WRITES(pb_encode(&s, PointerContainer_msg, &msg),
"\x0A\x01\x61\x12\x01\x62"
"\x0A\x01\x61\x12\x01\x62\x1A\x00"
"\x2A\x01\x65\x32\x01\x66\x3A\x00"
"\x42\x01\x63\x4A\x01\x64"));
}

View File

@@ -27,10 +27,14 @@ message CallbackContainerContainer {
required CallbackContainer submsg = 1;
}
message DefaultContainer {
optional int32 data = 1 [default = 10];
}
message PointerContainer {
required string text = 1 [(nanopb).pointer = true];
required bytes blob = 2 [(nanopb).pointer = true];
optional PointerContainer submsg = 3 [(nanopb).pointer = true];
required DefaultContainer submsg = 3 [(nanopb).pointer = true];
// This should be rejected:
// required int32 data = 4 [(nanopb).pointer = true];
repeated string rtext = 5 [(nanopb).pointer = true, (nanopb).max_count = 10];