From 28e34065cebc3b2e4e338759b38d25a4bfd2fb85 Mon Sep 17 00:00:00 2001 From: Howard Butler Date: Thu, 22 Sep 2011 20:44:35 -0500 Subject: [PATCH] tighten up error checking --- src/drivers/qfit/Iterator.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/drivers/qfit/Iterator.cpp b/src/drivers/qfit/Iterator.cpp index 3a2489ea49..8325482a76 100644 --- a/src/drivers/qfit/Iterator.cpp +++ b/src/drivers/qfit/Iterator.cpp @@ -102,15 +102,27 @@ RandomIterator::~RandomIterator() boost::uint64_t RandomIterator::seekImpl(boost::uint64_t count) { - m_istream->seekg( m_reader.getPointDataSize() * count + m_reader.getPointDataOffset(), std::ios::cur); + if (!m_istream->good()) + throw pdal_error("QFIT RandomIterator::seekImpl stream is no good before seeking!"); + m_istream->seekg( m_reader.getPointDataSize() * count + m_reader.getPointDataOffset(), std::ios::beg); + + if (m_istream->eof()) + throw pdal_error("Seek past the end of the file!"); + + if (!m_istream->good()) + throw pdal_error("QFIT RandomIterator::seekImpl stream is no good!"); + return count; } boost::uint32_t RandomIterator::readBufferImpl(PointBuffer& data) { - return m_reader.processBuffer(data, *m_istream, getStage().getNumPoints()-this->getIndex()); + boost::uint64_t numpoints = getStage().getNumPoints(); + boost::uint64_t index = this->getIndex(); + + return m_reader.processBuffer(data, *m_istream, numpoints-index); }