summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--usbredirparser/usbredirparser.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/usbredirparser/usbredirparser.c b/usbredirparser/usbredirparser.c
index 363b976..e4d5f0e 100644
--- a/usbredirparser/usbredirparser.c
+++ b/usbredirparser/usbredirparser.c
@@ -1864,6 +1864,7 @@ int usbredirparser_unserialize(struct usbredirparser *parser_pub,
return -1;
}
parser->header_read = i;
+ parser->type_header_len = 0;
/* Set various length field from the header (if any) */
if (parser->header_read == header_len) {
@@ -1911,15 +1912,20 @@ int usbredirparser_unserialize(struct usbredirparser *parser_pub,
}
i = parser->data_len;
if (unserialize_data(parser, &state, &remain, &parser->data, &i, "data")) {
+ free(parser->data);
+ parser->data = NULL;
+ parser->data_len = 0;
usbredirparser_assert_invariants(parser);
return -1;
}
if (parser->header_read == header_len &&
- parser->type_header_read == parser->type_header_len) {
+ parser->type_header_read == parser->type_header_len &&
+ parser->data_len > 0) {
parser->data_read = i;
} else if (parser->data != NULL) {
free(parser->data);
parser->data = NULL;
+ parser->data_len = 0;
}
/* Get the write buffer count and the write buffers */