From 74747e2ae6872b0095fcf00a6a33ecb018ab2fbc Mon Sep 17 00:00:00 2001 From: Nimrod Gileadi Date: Wed, 21 Jun 2023 04:01:50 -0700 Subject: [PATCH] Don't accept NaN geom sizes. PiperOrigin-RevId: 542209911 Change-Id: I80f9728e8e624d19783370ba5072f39624c1bbe7 --- src/user/user_objects.cc | 5 +++++ test/user/user_objects_test.cc | 21 +++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/src/user/user_objects.cc b/src/user/user_objects.cc index df1bcbfb..255774e7 100644 --- a/src/user/user_objects.cc +++ b/src/user/user_objects.cc @@ -1717,6 +1717,11 @@ void mjCGeom::Compile(void) { size[2] = mjMAX(fabs(aabb[2]), fabs(aabb[5])); } + for (double s : size) { + if (std::isnan(s)) { + throw mjCError(this, "nan size in geom '%s' (id = %d)", name.c_str(), id); + } + } // compute aabb ComputeAABB(); diff --git a/test/user/user_objects_test.cc b/test/user/user_objects_test.cc index a2d7d6d0..2139638a 100644 --- a/test/user/user_objects_test.cc +++ b/test/user/user_objects_test.cc @@ -440,6 +440,27 @@ TEST_F(MjCGeomTest, IgnoreBadGeomOutsideInertiagrouprange) { mj_deleteModel(m); } +// ------------- test invalid size values -------------------------------------- + +TEST_F(MjCGeomTest, NanSize) { + // even if the caller ignores warnings, models shouldn't compile with NaN + // geom sizes + mju_user_warning = nullptr; + static constexpr char xml[] = R"( + + + + + + + + )"; + std::array error; + mjModel* model = LoadModelFromString(xml, error.data(), error.size()); + ASSERT_THAT(model, testing::IsNull()); + ASSERT_THAT(error.data(), HasSubstr("nan")); +} + // ------------- test height fields -------------------------------------------- using MjCHFieldTest = MujocoTest;