mirror of
https://github.com/qpdf/qpdf.git
synced 2024-12-22 19:08:59 +00:00
Add range_check method to QIntC
This commit is contained in:
parent
24196c08cb
commit
7f4a4df919
@ -54,8 +54,6 @@ class BufferInputSource: public InputSource
|
||||
virtual void unreadCh(char ch);
|
||||
|
||||
private:
|
||||
static void range_check(qpdf_offset_t cur, qpdf_offset_t delta);
|
||||
|
||||
class Members
|
||||
{
|
||||
friend class BufferInputSource;
|
||||
|
@ -222,6 +222,20 @@ namespace QIntC // QIntC = qpdf Integer Conversion
|
||||
{
|
||||
return IntConverter<T, unsigned long long>::convert(i);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void range_check(T const& cur, T const& delta)
|
||||
{
|
||||
if ((delta > 0) &&
|
||||
((std::numeric_limits<T>::max() - cur) < delta))
|
||||
{
|
||||
std::ostringstream msg;
|
||||
msg.imbue(std::locale::classic());
|
||||
msg << "adding " << delta << " to " << cur
|
||||
<< " would cause an integer overflow";
|
||||
throw std::range_error(msg.str());
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
#endif // QINTC_HH
|
||||
|
@ -101,21 +101,6 @@ BufferInputSource::tell()
|
||||
return this->m->cur_offset;
|
||||
}
|
||||
|
||||
void
|
||||
BufferInputSource::range_check(qpdf_offset_t cur, qpdf_offset_t delta)
|
||||
{
|
||||
if ((delta > 0) &&
|
||||
((std::numeric_limits<qpdf_offset_t>::max() - cur) < delta))
|
||||
{
|
||||
std::ostringstream msg;
|
||||
msg.imbue(std::locale::classic());
|
||||
msg << "seeking forward from " << cur
|
||||
<< " by " << delta
|
||||
<< " would cause an overflow of the offset type";
|
||||
throw std::range_error(msg.str());
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
BufferInputSource::seek(qpdf_offset_t offset, int whence)
|
||||
{
|
||||
@ -126,12 +111,12 @@ BufferInputSource::seek(qpdf_offset_t offset, int whence)
|
||||
break;
|
||||
|
||||
case SEEK_END:
|
||||
range_check(this->m->max_offset, offset);
|
||||
QIntC::range_check(this->m->max_offset, offset);
|
||||
this->m->cur_offset = this->m->max_offset + offset;
|
||||
break;
|
||||
|
||||
case SEEK_CUR:
|
||||
range_check(this->m->cur_offset, offset);
|
||||
QIntC::range_check(this->m->cur_offset, offset);
|
||||
this->m->cur_offset += offset;
|
||||
break;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user