summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorljfa-ag <ljfa-ag@web.de>2015-08-06 14:04:51 +0200
committerljfa-ag <ljfa-ag@web.de>2015-08-06 14:04:51 +0200
commitbf685ed428c7ecbd0c76828ccec392473fafb9d4 (patch)
tree09cda7087bc6d89cbac1eab746c22cf5b1272a42 /src
parentb3fedb345162c1242b22446792aa80b6c10c7885 (diff)
downloadProject-Tick-bf685ed428c7ecbd0c76828ccec392473fafb9d4.tar.gz
Project-Tick-bf685ed428c7ecbd0c76828ccec392473fafb9d4.zip
Set failbit on negative length
Diffstat (limited to 'src')
-rw-r--r--src/tag_array.cpp8
-rw-r--r--src/tag_list.cpp4
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)