summaryrefslogtreecommitdiffstats
path: root/pb_encode.c
diff options
context:
space:
mode:
authorPetteri Aimonen <jpa@git.mail.kapsi.fi>2013-10-24 21:45:39 +0300
committerPetteri Aimonen <jpa@git.mail.kapsi.fi>2013-10-24 21:45:39 +0300
commited564186e14c79c767096f4b306dc3c6c5bd2e7d (patch)
tree5fde14736419a4a8513c0c6a5c6a42e926344ea0 /pb_encode.c
parent86d698315608c372868bb55f6d2c609600ac8e41 (diff)
Detect invalid sizes when encoding bytes fields.
Diffstat (limited to 'pb_encode.c')
-rw-r--r--pb_encode.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/pb_encode.c b/pb_encode.c
index 4aced3cb..563c1bb7 100644
--- a/pb_encode.c
+++ b/pb_encode.c
@@ -521,7 +521,10 @@ bool checkreturn pb_enc_fixed32(pb_ostream_t *stream, const pb_field_t *field, c
bool checkreturn pb_enc_bytes(pb_ostream_t *stream, const pb_field_t *field, const void *src)
{
const pb_bytes_array_t *bytes = (const pb_bytes_array_t*)src;
- UNUSED(field);
+
+ if (bytes->size + offsetof(pb_bytes_array_t, bytes) > field->data_size)
+ PB_RETURN_ERROR(stream, "bytes size exceeded");
+
return pb_encode_string(stream, bytes->bytes, bytes->size);
}