bounds checking pointer/string ranges

master
Daniel Kolesa 2017-02-19 18:31:08 +01:00
parent d6219046be
commit 78e6771148
2 changed files with 14 additions and 0 deletions

View File

@ -1731,9 +1731,20 @@ struct iterator_range: input_range<iterator_range<T>> {
/* satisfy output_range */
void put(value_type const &v) {
/* rely on iterators to do their own checks */
if constexpr(std::is_pointer_v<T>) {
if (p_beg == p_end) {
throw std::out_of_range{"put into an empty range"};
}
}
*(p_beg++) = v;
}
void put(value_type &&v) {
if constexpr(std::is_pointer_v<T>) {
if (p_beg == p_end) {
throw std::out_of_range{"put into an empty range"};
}
}
*(p_beg++) = std::move(v);
}

View File

@ -148,6 +148,9 @@ public:
T &operator[](size_t i) const { return p_beg[i]; }
void put(T v) {
if (p_beg == p_end) {
throw std::out_of_range{"put into an empty range"};
}
*(p_beg++) = v;
}