diff options
author | Hans de Goede <hdegoede@redhat.com> | 2012-02-14 14:26:29 +0100 |
---|---|---|
committer | Hans de Goede <hdegoede@redhat.com> | 2012-02-14 18:56:08 +0100 |
commit | 79e2330bc5c7127d9bfaba3291a3aa3630fbd253 (patch) | |
tree | eff193198c66b51b967c920ba38e59d322366ded /usbredirparser | |
parent | eb90de4628df2d7152763e4df3f0a6f0e722dcd3 (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.c | 16 |
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; } } } |