Ensure to pack string length in 'z' template
Ensure to pack string length in 'z' template to skipstone_message_pack()
This commit is contained in:
parent
31b227fcea
commit
bd20b8da36
3 changed files with 13 additions and 3 deletions
|
@ -13,11 +13,13 @@ int main(int argc, char **argv) {
|
|||
|
||||
if ((len = skipstone_message_pack(buf,
|
||||
SKIPSTONE_MESSAGE_MAX_PAYLOAD,
|
||||
"CCCC",
|
||||
"CCCCzz",
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4)) < 0) {
|
||||
4,
|
||||
"KMFDM",
|
||||
"Nihil")) < 0) {
|
||||
fprintf(stderr, "%s: %s: %s\n", argv[0],
|
||||
"skipstone_message_pack()", strerror(errno));
|
||||
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
#include <skipstone/map.h>
|
||||
|
||||
#define SKIPSTONE_MESSAGE_MAX_PAYLOAD 4096
|
||||
#define SKIPSTONE_MESSAGE_MAX_STRLEN 256
|
||||
|
||||
ssize_t skipstone_message_pack(void *message,
|
||||
size_t len,
|
||||
|
|
|
@ -60,10 +60,16 @@ ssize_t skipstone_message_pack(void *message,
|
|||
char *value = va_arg(args, char *);
|
||||
size_t sz = strlen(value);
|
||||
|
||||
if (len < offset + sz) {
|
||||
if (len < offset + sz + 1) {
|
||||
goto done;
|
||||
} else if (sz > SKIPSTONE_MESSAGE_MAX_STRLEN) {
|
||||
errno = EOVERFLOW;
|
||||
|
||||
goto error_toobig;
|
||||
}
|
||||
|
||||
((uint8_t *)message)[offset++] = (uint8_t)sz;
|
||||
|
||||
memcpy((uint8_t *)message + offset, value, sz);
|
||||
|
||||
offset += sz;
|
||||
|
@ -83,6 +89,7 @@ ssize_t skipstone_message_pack(void *message,
|
|||
done:
|
||||
return offset;
|
||||
|
||||
error_toobig:
|
||||
error_invalid_template:
|
||||
return -1;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue