Fix null pointer deref for unknown class names.

PiperOrigin-RevId: 610391077
Change-Id: I5abd62ff46e31e788f06fe111adb3c25287d4fdc
This commit is contained in:
Yuval Tassa
2024-02-26 06:38:03 -08:00
committed by Copybara-Service
parent b47d97652e
commit 8679c9fc59
4 changed files with 46 additions and 5 deletions
+25 -1
View File
@@ -33,12 +33,13 @@ namespace mujoco {
namespace {
using ::std::string;
using ::testing::AllOf;
using ::testing::Eq;
using ::testing::FloatEq;
using ::testing::HasSubstr;
using ::testing::IsNan;
using ::testing::IsNull;
using ::testing::NotNull;
using ::testing::FloatEq;
using XMLReaderTest = MujocoTest;
@@ -462,6 +463,29 @@ TEST_F(XMLReaderTest, RepeatedDefaultName) {
EXPECT_THAT(error.data(), HasSubstr("repeated default class name"));
}
TEST_F(XMLReaderTest, InvalidDefaultClassName) {
static constexpr char xml[] = R"(
<mujoco>
<default>
<default class="sphere">
<geom type="sphere" size="1"/>
</default>
</default>
<worldbody>
<body>
<geom class="invalid"/>
</body>
</worldbody>
</mujoco>
)";
std::array<char, 1024> error;
mjModel* model = LoadModelFromString(xml, error.data(), error.size());
ASSERT_THAT(model, IsNull()) << error.data();
EXPECT_THAT(error.data(),
AllOf(HasSubstr("unknown default class name 'invalid'"),
HasSubstr("Element 'geom'"), HasSubstr("line 10")));
}
// ------------------------ test including -------------------------------------
// credit: https://www.mjt.me.uk/posts/smallest-png/