From bc53c1d02232b5808a3f369081d3ffceef29d6fb Mon Sep 17 00:00:00 2001 From: Michal Sieron Date: Thu, 19 Jan 2023 21:07:40 +0100 Subject: [PATCH 1/2] bitparser: check bitstream length in the file It was present before, but for some reason was removed in 16932786. Signed-off-by: Michal Sieron --- src/bitparser.cpp | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/bitparser.cpp b/src/bitparser.cpp index cc10009..5994e9c 100644 --- a/src/bitparser.cpp +++ b/src/bitparser.cpp @@ -109,10 +109,21 @@ int BitParser::parse() /* process all field */ int pos = parseHeader(); - /* rest of the file is data to send */ - _bit_data.resize(_raw_data.size() - pos); - std::move(_raw_data.begin() + pos, _raw_data.end(), _bit_data.begin()); - _bit_length = _bit_data.size(); + /* _bit_length is length of data to send */ + int rest_of_file_length = _raw_data.size() - pos; + if (_bit_length < rest_of_file_length) { + printWarn("File is longer than bitstream length declared in the header: " + + std::to_string(rest_of_file_length) + " vs " + std::to_string(_bit_length) + ); + } else if (_bit_length > rest_of_file_length) { + printError("File is shorter than bitstream length declared in the header: " + + std::to_string(rest_of_file_length) + " vs " + std::to_string(_bit_length) + ); + return 1; + } + + _bit_data.resize(_bit_length); + std::move(_raw_data.begin() + pos, _raw_data.begin() + pos + _bit_length, _bit_data.begin()); if (_reverseOrder) { for (int i = 0; i < _bit_length; i++) { From d127fb95542dd8bf9e6f2fd5c751bd7943f14f46 Mon Sep 17 00:00:00 2001 From: Michal Sieron Date: Fri, 20 Jan 2023 09:09:41 +0100 Subject: [PATCH 2/2] bitparser: replace _raw_data.size() with _file_size Signed-off-by: Michal Sieron --- src/bitparser.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bitparser.cpp b/src/bitparser.cpp index 5994e9c..65299a7 100644 --- a/src/bitparser.cpp +++ b/src/bitparser.cpp @@ -110,7 +110,7 @@ int BitParser::parse() int pos = parseHeader(); /* _bit_length is length of data to send */ - int rest_of_file_length = _raw_data.size() - pos; + int rest_of_file_length = _file_size - pos; if (_bit_length < rest_of_file_length) { printWarn("File is longer than bitstream length declared in the header: " + std::to_string(rest_of_file_length) + " vs " + std::to_string(_bit_length)