Handle unterminated strings when encoding.

If the null terminator is not present, string will be limited to the
data size of the field.

If you are still using the pb_enc_string (deprecated since 0.1.3) from
callbacks, now would be an excellent time to stop. The pb_field_t for
the callback will not contain proper data_size. Use pb_encode_string()
instead.

Update issue 68
Status: FixedInGit
This commit is contained in:
Petteri Aimonen
2013-04-14 09:46:39 +03:00
parent 9939910833
commit d2063ff0b6
3 changed files with 19 additions and 5 deletions

View File

@@ -180,12 +180,14 @@ int main()
{
uint8_t buffer[30];
pb_ostream_t s;
char value[] = "xyzzy";
char value[30] = "xyzzy";
COMMENT("Test pb_enc_string")
TEST(WRITES(pb_enc_string(&s, NULL, &value), "\x05xyzzy"))
TEST(WRITES(pb_enc_string(&s, &StringMessage_fields[0], &value), "\x05xyzzy"))
value[0] = '\0';
TEST(WRITES(pb_enc_string(&s, NULL, &value), "\x00"))
TEST(WRITES(pb_enc_string(&s, &StringMessage_fields[0], &value), "\x00"))
memset(value, 'x', 30);
TEST(WRITES(pb_enc_string(&s, &StringMessage_fields[0], &value), "\x0Axxxxxxxxxx"))
}
{