From 7875e93feab37b28e887f6c638f7016ccf7aef40 Mon Sep 17 00:00:00 2001 From: Matthew Bennice Date: Sun, 24 Mar 2024 20:58:08 -0700 Subject: [PATCH] Improve error text when a mesh face references an invalid vertex. PiperOrigin-RevId: 618715730 Change-Id: I28fae1e1570d359db4be98e9c5b7713169eaf34f --- src/user/user_mesh.cc | 3 ++- test/user/user_mesh_test.cc | 25 +++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/user/user_mesh.cc b/src/user/user_mesh.cc index 71357f45..1bd6f5b4 100644 --- a/src/user/user_mesh.cc +++ b/src/user/user_mesh.cc @@ -549,7 +549,8 @@ void mjCMesh::Compile(const mjVFS* vfs) { // check vertices exist for (int i=0; i= nvert_ || userface_[i] < 0) { - throw mjCError(this, "index in face does not exist in vertex array"); + throw mjCError(this, "in face %d, vertex index %d does not exist", + nullptr, i / 3, userface_[i]); } } diff --git a/test/user/user_mesh_test.cc b/test/user/user_mesh_test.cc index 1eaaa0e1..0fc57317 100644 --- a/test/user/user_mesh_test.cc +++ b/test/user/user_mesh_test.cc @@ -945,6 +945,31 @@ TEST_F(MjCMeshTest, NaNConvexHullDisallowed) { mj_deleteModel(model); } +TEST_F(MjCMeshTest, InvalidIndexInFace) { + static constexpr char xml[] = R"( + + + + + + + + + )"; + std::array error; + mjModel* model = LoadModelFromString(xml, error.data(), error.size()); + ASSERT_THAT(model, IsNull()); + EXPECT_THAT( + error.data(), + HasSubstr( + "in face 0, vertex index 6 does not exist")); + mj_deleteModel(model); +} + + } // namespace } // namespace mujoco