diff --git a/protocols/dmp/dmp.cpp b/protocols/dmp/dmp.cpp index 0def55a..097bb23 100644 --- a/protocols/dmp/dmp.cpp +++ b/protocols/dmp/dmp.cpp @@ -134,15 +134,17 @@ void address_pair_list::iStream(PDU::Stream stream) range pr(type_->data_type, type_->address_length); pr.iStream(stream); - if (!stream->good() || pr.count * pr.incriment > stream->available()) { - stream->setstate(std::ios_base::failbit); - return; - } + if (!stream->good() || stream->available() < pr.count * pr.incriment) + return stream->setstate(std::ios_base::failbit); // Property Data std::vector pd; - for (uint32_t i = 0; i < pr.count * pr.incriment; i ++) - pd.push_back(stream->readType()); + std::copy(stream->data(), stream->data() + pr.count * pr.incriment, + std::back_inserter(pd)); + stream->ignore(pd.size()); + + if (!stream->available()) + stream->setstate(std::ios_base::eofbit); // Property Fields properties.push_back(address_data_pair(pr, pd));