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,
|
if ((len = skipstone_message_pack(buf,
|
||||||
SKIPSTONE_MESSAGE_MAX_PAYLOAD,
|
SKIPSTONE_MESSAGE_MAX_PAYLOAD,
|
||||||
"CCCC",
|
"CCCCzz",
|
||||||
1,
|
1,
|
||||||
2,
|
2,
|
||||||
3,
|
3,
|
||||||
4)) < 0) {
|
4,
|
||||||
|
"KMFDM",
|
||||||
|
"Nihil")) < 0) {
|
||||||
fprintf(stderr, "%s: %s: %s\n", argv[0],
|
fprintf(stderr, "%s: %s: %s\n", argv[0],
|
||||||
"skipstone_message_pack()", strerror(errno));
|
"skipstone_message_pack()", strerror(errno));
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
#include <skipstone/map.h>
|
#include <skipstone/map.h>
|
||||||
|
|
||||||
#define SKIPSTONE_MESSAGE_MAX_PAYLOAD 4096
|
#define SKIPSTONE_MESSAGE_MAX_PAYLOAD 4096
|
||||||
|
#define SKIPSTONE_MESSAGE_MAX_STRLEN 256
|
||||||
|
|
||||||
ssize_t skipstone_message_pack(void *message,
|
ssize_t skipstone_message_pack(void *message,
|
||||||
size_t len,
|
size_t len,
|
||||||
|
|
|
@ -60,10 +60,16 @@ ssize_t skipstone_message_pack(void *message,
|
||||||
char *value = va_arg(args, char *);
|
char *value = va_arg(args, char *);
|
||||||
size_t sz = strlen(value);
|
size_t sz = strlen(value);
|
||||||
|
|
||||||
if (len < offset + sz) {
|
if (len < offset + sz + 1) {
|
||||||
goto done;
|
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);
|
memcpy((uint8_t *)message + offset, value, sz);
|
||||||
|
|
||||||
offset += sz;
|
offset += sz;
|
||||||
|
@ -83,6 +89,7 @@ ssize_t skipstone_message_pack(void *message,
|
||||||
done:
|
done:
|
||||||
return offset;
|
return offset;
|
||||||
|
|
||||||
|
error_toobig:
|
||||||
error_invalid_template:
|
error_invalid_template:
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue