Commit 8657c6f00489b5c26fc0c00f2fc91c5682acbe95

Authored by Jay Berkenbilt
1 parent 8ea2f844

Prevent seeking before beginning of BufferInputSource

Showing 1 changed file with 14 additions and 0 deletions
libqpdf/QPDF.cc
... ... @@ -231,6 +231,10 @@ QPDF::BufferInputSource::~BufferInputSource()
231 231 qpdf_offset_t
232 232 QPDF::BufferInputSource::findAndSkipNextEOL()
233 233 {
  234 + if (this->cur_offset < 0)
  235 + {
  236 + throw std::logic_error("INTERNAL ERROR: BufferInputSource offset < 0");
  237 + }
234 238 qpdf_offset_t end_pos = (qpdf_offset_t) this->buf->getSize();
235 239 if (this->cur_offset >= end_pos)
236 240 {
... ... @@ -301,6 +305,12 @@ QPDF::BufferInputSource::seek(qpdf_offset_t offset, int whence)
301 305 "INTERNAL ERROR: invalid argument to BufferInputSource::seek");
302 306 break;
303 307 }
  308 +
  309 + if (this->cur_offset < 0)
  310 + {
  311 + throw std::runtime_error(
  312 + this->description + ": seek before beginning of buffer");
  313 + }
304 314 }
305 315  
306 316 void
... ... @@ -312,6 +322,10 @@ QPDF::BufferInputSource::rewind()
312 322 size_t
313 323 QPDF::BufferInputSource::read(char* buffer, size_t length)
314 324 {
  325 + if (this->cur_offset < 0)
  326 + {
  327 + throw std::logic_error("INTERNAL ERROR: BufferInputSource offset < 0");
  328 + }
315 329 qpdf_offset_t end_pos = (qpdf_offset_t) this->buf->getSize();
316 330 if (this->cur_offset >= end_pos)
317 331 {
... ...