mirror of
https://github.com/qpdf/qpdf.git
synced 2024-12-22 10:58:58 +00:00
In ObjTable change maximum allowable object id to std::vector<T>::max_size()
Given that the PDF spec requires the xref table to contain entries for all object ids <= the maximum id present in a PDF document, max_size is a qpdf implementation limitation for legitimate object ids.
This commit is contained in:
parent
c1377176f8
commit
68ac2179bd
@ -113,6 +113,7 @@ class ObjTable: public std::vector<T>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline void
|
inline void
|
||||||
forEach(std::function<void(int, const T&)> fn)
|
forEach(std::function<void(int, const T&)> fn)
|
||||||
{
|
{
|
||||||
@ -131,24 +132,26 @@ class ObjTable: public std::vector<T>
|
|||||||
inline T&
|
inline T&
|
||||||
element(size_t idx)
|
element(size_t idx)
|
||||||
{
|
{
|
||||||
|
static const size_t max_size = std::vector<T>::max_size();
|
||||||
if (idx < std::vector<T>::size()) {
|
if (idx < std::vector<T>::size()) {
|
||||||
return std::vector<T>::operator[](idx);
|
return std::vector<T>::operator[](idx);
|
||||||
} else if (idx < static_cast<size_t>(std::numeric_limits<int>::max())) {
|
} else if (idx < max_size) {
|
||||||
return sparse_elements[idx];
|
return sparse_elements[idx];
|
||||||
}
|
}
|
||||||
throw std::runtime_error("Invalid object id accessing ObjTable.");
|
throw std::runtime_error("Impossibly large object id encountered accessing ObjTable");
|
||||||
return element(0); // doesn't return
|
return element(0); // doesn't return
|
||||||
}
|
}
|
||||||
|
|
||||||
inline T const&
|
inline T const&
|
||||||
element(size_t idx) const
|
element(size_t idx) const
|
||||||
{
|
{
|
||||||
|
static const size_t max_size = std::vector<T>::max_size();
|
||||||
if (idx < std::vector<T>::size()) {
|
if (idx < std::vector<T>::size()) {
|
||||||
return std::vector<T>::operator[](idx);
|
return std::vector<T>::operator[](idx);
|
||||||
} else if (idx < static_cast<size_t>(std::numeric_limits<int>::max())) {
|
} else if (idx < max_size) {
|
||||||
return sparse_elements.at(idx);
|
return sparse_elements.at(idx);
|
||||||
}
|
}
|
||||||
throw std::runtime_error("Invalid object id accessing ObjTable.");
|
throw std::runtime_error("Impossibly large object id encountered accessing ObjTable");
|
||||||
return element(0); // doesn't return
|
return element(0); // doesn't return
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user