summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrediano Ziglio <freddy77@gmail.com>2021-09-09 10:55:43 +0100
committerFrediano Ziglio <freddy77@gmail.com>2021-09-29 08:38:10 +0100
commit41720202800491d161aeb2e0a5d3665256ddc0ae (patch)
tree50a55efc141e151646586f0f21ca697a33f7fc02
parenta4d9ae93abb2b22adc83c6fecc8c8e8f69366a88 (diff)
Change data_len and data together
The array pointed by data should be big to contain data_len bytes. Change one field close to the other to make easier to maintain such invariant in usbredirparser_unserialize. Signed-off-by: Frediano Ziglio <freddy77@gmail.com>
-rw-r--r--usbredirparser/usbredirparser.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/usbredirparser/usbredirparser.c b/usbredirparser/usbredirparser.c
index d851fb4..1518b1e 100644
--- a/usbredirparser/usbredirparser.c
+++ b/usbredirparser/usbredirparser.c
@@ -1880,7 +1880,6 @@ int usbredirparser_unserialize(struct usbredirparser *parser_pub,
return -1;
}
parser->type_header_len = type_header_len;
- parser->data_len = parser->header.length - type_header_len;
}
data = parser->type_header;
@@ -1893,12 +1892,15 @@ int usbredirparser_unserialize(struct usbredirparser *parser_pub,
parser->type_header_read = i;
}
- if (parser->data_len) {
- parser->data = malloc(parser->data_len);
- if (!parser->data) {
- ERROR("Out of memory allocating unserialize buffer");
- usbredirparser_assert_invariants(parser);
- return -1;
+ if (parser->type_header_read == parser->type_header_len) {
+ parser->data_len = parser->header.length - parser->type_header_len;
+ if (parser->data_len) {
+ parser->data = malloc(parser->data_len);
+ if (!parser->data) {
+ ERROR("Out of memory allocating unserialize buffer");
+ usbredirparser_assert_invariants(parser);
+ return -1;
+ }
}
}
i = parser->data_len;