summaryrefslogtreecommitdiff
path: root/usbredirparser
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2012-02-14 14:26:29 +0100
committerHans de Goede <hdegoede@redhat.com>2012-02-14 18:56:08 +0100
commit79e2330bc5c7127d9bfaba3291a3aa3630fbd253 (patch)
treeeff193198c66b51b967c920ba38e59d322366ded /usbredirparser
parenteb90de4628df2d7152763e4df3f0a6f0e722dcd3 (diff)
usbredirparser: call usbredirparser_verify_type_header after we get the data
So that it can do some sanity checks on the data too. Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Diffstat (limited to 'usbredirparser')
-rw-r--r--usbredirparser/usbredirparser.c16
1 files changed, 7 insertions, 9 deletions
diff --git a/usbredirparser/usbredirparser.c b/usbredirparser/usbredirparser.c
index 159603e..63c2c89 100644
--- a/usbredirparser/usbredirparser.c
+++ b/usbredirparser/usbredirparser.c
@@ -682,24 +682,22 @@ int usbredirparser_do_read(struct usbredirparser *parser_pub)
}
} else if (parser->type_header_read < parser->type_header_len) {
parser->type_header_read += r;
- if (parser->type_header_read == parser->type_header_len) {
- if (!usbredirparser_verify_type_header(parser_pub,
- parser->header.type, parser->type_header,
- parser->data, parser->data_len, 0)) {
- parser->to_skip = parser->data_len;
- return -2;
- }
- }
} else {
parser->data_read += r;
if (parser->data_read == parser->data_len) {
- usbredirparser_call_type_func(parser);
+ r = usbredirparser_verify_type_header(parser_pub,
+ parser->header.type, parser->type_header,
+ parser->data, parser->data_len, 0);
+ if (r)
+ usbredirparser_call_type_func(parser);
parser->header_read = 0;
parser->type_header_len = 0;
parser->type_header_read = 0;
parser->data_len = 0;
parser->data_read = 0;
parser->data = NULL;
+ if (!r)
+ return -2;
}
}
}