Fix bugs with skipstone_message_unpack()

This commit is contained in:
XANTRONIX Development 2020-09-22 09:55:06 -05:00
parent 272d9fe38c
commit c676a32460
2 changed files with 9 additions and 6 deletions

View file

@ -1,22 +1,25 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <inttypes.h>
#include <errno.h>
#include <skipstone/message.h>
int main(int argc, char **argv) {
uint8_t buf[7] = "\x5KMFDM",
uint8_t buf[11] = "\x5KMFDM\x04\x03\x02\x01",
str[SKIPSTONE_MESSAGE_MAX_STRLEN];
if (skipstone_message_unpack(buf, sizeof(buf), "z", str) < 0) {
uint32_t num;
if (skipstone_message_unpack(buf, sizeof(buf), "zL", str, &num) < 0) {
fprintf(stderr, "%s: %s: %s\n",
argv[0], "skipstone_message_unpack()", strerror(errno));
goto error_message_unpack;
}
printf("%s\n", str);
printf("%s: %" PRIu32 "\n", str, num);
return 0;

View file

@ -137,7 +137,7 @@ ssize_t skipstone_message_unpack(void *message,
sz = ((uint8_t *)message)[offset++];
if (len < offset + sz + 1) {
if (len < offset + sz) {
goto done;
}
@ -145,9 +145,9 @@ ssize_t skipstone_message_unpack(void *message,
memcpy(dest, (uint8_t *)message + offset, sz);
offset += sz;
((uint8_t *)dest)[sz] = '\0';
((uint8_t *)message)[offset++] = '\0';
offset += sz;
break;
}