Browse Source

Math: check for OOB access in Frustum::operator[]().

pull/331/head
Vladimír Vondruš 7 years ago
parent
commit
8079cda8aa
  1. 10
      src/Magnum/Math/Frustum.h
  2. 1
      src/Magnum/Math/Test/CMakeLists.txt
  3. 5
      src/Magnum/Math/Test/FrustumTest.cpp

10
src/Magnum/Math/Frustum.h

@ -122,9 +122,15 @@ template<class T> class Frustum {
return Corrade::Containers::StaticArrayView<6, const Vector4<T>>{_data};
}
/** @brief Plane at given index */
/**
* @brief Plane at given index
*
* Expects that @p i is less than @cpp 6 @ce.
*/
/* returns const& so [][] operations are also constexpr */
constexpr const Vector4<T>& operator[](std::size_t i) const { return _data[i]; }
constexpr const Vector4<T>& operator[](std::size_t i) const {
return CORRADE_CONSTEXPR_ASSERT(i < 6, "Math::Frustum::operator[](): index" << i << "out of range"), _data[i];
}
/** @brief Left plane */
constexpr Vector4<T> left() const { return _data[0]; }

1
src/Magnum/Math/Test/CMakeLists.txt

@ -75,6 +75,7 @@ set_property(TARGET
MathComplexTest
MathCubicHermiteTest
MathDualComplexTest
MathFrustumTest
MathQuaternionTest
MathDualQuaternionTest

5
src/Magnum/Math/Test/FrustumTest.cpp

@ -283,6 +283,11 @@ void FrustumTest::data() {
#endif
Float b = *a.data();
CORRADE_COMPARE(b, 1.0f);
std::ostringstream out;
Error redirectError{&out};
a[6];
CORRADE_COMPARE(out.str(), "Math::Frustum::operator[](): index 6 out of range\n");
}
void FrustumTest::compare() {

Loading…
Cancel
Save