diff options
| author | ljfa-ag <ljfa-ag@web.de> | 2015-08-06 14:04:51 +0200 |
|---|---|---|
| committer | ljfa-ag <ljfa-ag@web.de> | 2015-08-06 14:04:51 +0200 |
| commit | bf685ed428c7ecbd0c76828ccec392473fafb9d4 (patch) | |
| tree | 09cda7087bc6d89cbac1eab746c22cf5b1272a42 | |
| parent | b3fedb345162c1242b22446792aa80b6c10c7885 (diff) | |
| download | Project-Tick-bf685ed428c7ecbd0c76828ccec392473fafb9d4.tar.gz Project-Tick-bf685ed428c7ecbd0c76828ccec392473fafb9d4.zip | |
Set failbit on negative length
| -rw-r--r-- | src/tag_array.cpp | 8 | ||||
| -rw-r--r-- | src/tag_list.cpp | 4 |
2 files changed, 9 insertions, 3 deletions
diff --git a/src/tag_array.cpp b/src/tag_array.cpp index 94b8ffe7ac..f83bce11f7 100644 --- a/src/tag_array.cpp +++ b/src/tag_array.cpp @@ -107,7 +107,9 @@ void tag_array<int8_t>::read_payload(io::stream_reader& reader) { int32_t length; reader.read_num(length); - if(length < 0 || !reader.get_istr()) + if(length < 0) + reader.get_istr().setstate(std::ios::failbit); + if(!reader.get_istr()) throw io::input_error("Error reading length of tag_byte_array"); data.resize(length); @@ -121,7 +123,9 @@ void tag_array<int32_t>::read_payload(io::stream_reader& reader) { int32_t length; reader.read_num(length); - if(length < 0 || !reader.get_istr()) + if(length < 0) + reader.get_istr().setstate(std::ios::failbit); + if(!reader.get_istr()) throw io::input_error("Error reading length of tag_int_array"); data.clear(); diff --git a/src/tag_list.cpp b/src/tag_list.cpp index 53c1a8e392..f5a5b91758 100644 --- a/src/tag_list.cpp +++ b/src/tag_list.cpp @@ -138,7 +138,9 @@ void tag_list::read_payload(io::stream_reader& reader) int32_t length; reader.read_num(length); - if(length < 0 || !reader.get_istr()) + if(length < 0) + reader.get_istr().setstate(std::ios::failbit); + if(!reader.get_istr()) throw io::input_error("Error reading length of tag_list"); if(lt != tag_type::End) |
