Check for invalid node tags in gmsh parser.
PiperOrigin-RevId: 621538409 Change-Id: I91ba56b931d815fccd65ae32281bc19ae3a45ee7
This commit is contained in:
committed by
Copybara-Service
parent
d7f131e086
commit
7d3b662d5b
@@ -1366,6 +1366,9 @@ void mjCFlexcomp::LoadGMSH22(char* buffer, int binary, int nodeend,
|
||||
if (!ss.good()) {
|
||||
throw mjCError(NULL, "Error reading Elements");
|
||||
}
|
||||
if (nodeTag > numElements || nodeTag < 1) {
|
||||
throw mjCError(NULL, "Invalid node tag");
|
||||
}
|
||||
element.push_back((int)(nodeTag-1));
|
||||
}
|
||||
}
|
||||
@@ -1432,6 +1435,9 @@ void mjCFlexcomp::LoadGMSH22(char* buffer, int binary, int nodeend,
|
||||
// read first element
|
||||
for (int k =0; k<numNodeTags; k++) {
|
||||
ReadFromBuffer(&nodeTag, elementsBuffer + componentSize*(6+k));
|
||||
if (nodeTag > numElements || nodeTag < 1) {
|
||||
throw mjCError(NULL, "Invalid node tag");
|
||||
}
|
||||
element.push_back(nodeTag-1);
|
||||
}
|
||||
|
||||
@@ -1445,6 +1451,9 @@ void mjCFlexcomp::LoadGMSH22(char* buffer, int binary, int nodeend,
|
||||
for (int k =0; k < numNodeTags; k++) {
|
||||
const char* nodeTagBuffer = elementsBuffer + componentSize*(6+k);
|
||||
ReadFromBuffer(&nodeTag, nodeTagBuffer + offset);
|
||||
if (nodeTag > numElements || nodeTag < 1) {
|
||||
throw mjCError(NULL, "Invalid node tag");
|
||||
}
|
||||
element.push_back(nodeTag-1);
|
||||
}
|
||||
}
|
||||
@@ -1456,6 +1465,9 @@ void mjCFlexcomp::LoadGMSH22(char* buffer, int binary, int nodeend,
|
||||
for (int k =0; k < numNodeTags; k++) {
|
||||
const char* nodeTagBuffer = elementsBuffer + componentSize*(4+k);
|
||||
ReadFromBuffer(&nodeTag, nodeTagBuffer);
|
||||
if (nodeTag > numElements || nodeTag < 1) {
|
||||
throw mjCError(NULL, "Invalid node tag");
|
||||
}
|
||||
element.push_back(nodeTag-1);
|
||||
}
|
||||
|
||||
@@ -1467,6 +1479,9 @@ void mjCFlexcomp::LoadGMSH22(char* buffer, int binary, int nodeend,
|
||||
for (int k=0; k < numNodeTags; k++) {
|
||||
const char* nodeTagBuffer = elementsBuffer + componentSize*(3+k);
|
||||
ReadFromBuffer(&nodeTag, nodeTagBuffer + offset);
|
||||
if (nodeTag > numElements || nodeTag < 1) {
|
||||
throw mjCError(NULL, "Invalid node tag");
|
||||
}
|
||||
element.push_back(nodeTag-1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -220,8 +220,8 @@ TEST_F(UserFlexTest, CreateBVHSuccess) {
|
||||
GetTestDataFilePath("user/testdata/robot_arm.xml");
|
||||
std::array<char, 1024> error;
|
||||
mjModel* m = mj_loadXML(xml_path.c_str(), 0, error.data(), error.size());
|
||||
ASSERT_THAT(m, NotNull()) << error.data();
|
||||
mjData* d = mj_makeData(m);
|
||||
EXPECT_THAT(m, NotNull()) << error.data();
|
||||
mj_step(m, d);
|
||||
mj_deleteModel(m);
|
||||
mj_deleteData(d);
|
||||
@@ -232,8 +232,8 @@ TEST_F(UserFlexTest, LoadMSHBinaryGMSH_41_Success) {
|
||||
GetTestDataFilePath("user/testdata/shark_41_binary_gmshApp.xml");
|
||||
std::array<char, 1024> error;
|
||||
mjModel* m = mj_loadXML(xml_path.c_str(), 0, error.data(), error.size());
|
||||
ASSERT_THAT(m, NotNull()) << error.data();
|
||||
mjData* d = mj_makeData(m);
|
||||
EXPECT_THAT(m, NotNull()) << error.data();
|
||||
EXPECT_EQ(m->nflexvert, 652);
|
||||
EXPECT_EQ(m->nflexelem, 1654);
|
||||
mj_step(m, d);
|
||||
@@ -246,8 +246,8 @@ TEST_F(UserFlexTest, LoadMSHBinaryGMSH_22_Success) {
|
||||
GetTestDataFilePath("user/testdata/shark_22_binary_gmshApp.xml");
|
||||
std::array<char, 1024> error;
|
||||
mjModel* m = mj_loadXML(xml_path.c_str(), 0, error.data(), error.size());
|
||||
ASSERT_THAT(m, NotNull()) << error.data();
|
||||
mjData* d = mj_makeData(m);
|
||||
EXPECT_THAT(m, NotNull()) << error.data();
|
||||
EXPECT_EQ(m->nflexvert, 644);
|
||||
EXPECT_EQ(m->nflexelem, 1635);
|
||||
mj_step(m, d);
|
||||
@@ -260,8 +260,8 @@ TEST_F(UserFlexTest, LoadMSHBinaryFTETWILD_22_Success) {
|
||||
GetTestDataFilePath("user/testdata/shark_22_binary_fTetWild.xml");
|
||||
std::array<char, 1024> error;
|
||||
mjModel* m = mj_loadXML(xml_path.c_str(), 0, error.data(), error.size());
|
||||
ASSERT_THAT(m, NotNull()) << error.data();
|
||||
mjData* d = mj_makeData(m);
|
||||
EXPECT_THAT(m, NotNull()) << error.data();
|
||||
EXPECT_EQ(m->nflexvert, 644);
|
||||
EXPECT_EQ(m->nflexelem, 1635);
|
||||
mj_step(m, d);
|
||||
@@ -274,8 +274,8 @@ TEST_F(UserFlexTest, LoadMSHASCIIGMSH_41_Success) {
|
||||
GetTestDataFilePath("user/testdata/shark_41_ascii_gmshApp.xml");
|
||||
std::array<char, 1024> error;
|
||||
mjModel* m = mj_loadXML(xml_path.c_str(), 0, error.data(), error.size());
|
||||
ASSERT_THAT(m, NotNull()) << error.data();
|
||||
mjData* d = mj_makeData(m);
|
||||
EXPECT_THAT(m, NotNull()) << error.data();
|
||||
EXPECT_EQ(m->nflexvert, 652);
|
||||
EXPECT_EQ(m->nflexelem, 1654);
|
||||
mj_step(m, d);
|
||||
@@ -288,8 +288,8 @@ TEST_F(UserFlexTest, LoadMSHASCIIGMSH_22_Success) {
|
||||
GetTestDataFilePath("user/testdata/shark_22_ascii_gmshApp.xml");
|
||||
std::array<char, 1024> error;
|
||||
mjModel* m = mj_loadXML(xml_path.c_str(), 0, error.data(), error.size());
|
||||
ASSERT_THAT(m, NotNull()) << error.data();
|
||||
mjData* d = mj_makeData(m);
|
||||
EXPECT_THAT(m, NotNull()) << error.data();
|
||||
EXPECT_EQ(m->nflexvert, 652);
|
||||
EXPECT_EQ(m->nflexelem, 1654);
|
||||
mj_step(m, d);
|
||||
@@ -302,8 +302,8 @@ TEST_F(UserFlexTest, LoadMSHASCIIFTETWILD_22_Success) {
|
||||
GetTestDataFilePath("user/testdata/shark_22_ascii_fTetWild.xml");
|
||||
std::array<char, 1024> error;
|
||||
mjModel* m = mj_loadXML(xml_path.c_str(), 0, error.data(), error.size());
|
||||
ASSERT_THAT(m, NotNull()) << error.data();
|
||||
mjData* d = mj_makeData(m);
|
||||
EXPECT_THAT(m, NotNull()) << error.data();
|
||||
EXPECT_EQ(m->nflexvert, 652);
|
||||
EXPECT_EQ(m->nflexelem, 1654);
|
||||
mj_step(m, d);
|
||||
@@ -383,8 +383,7 @@ TEST_F(UserFlexTest, LoadMSHASCII_22_MissingNumElements_Fail) {
|
||||
"user/testdata/malformed_shark_22_ascii_missing_num_elements.xml");
|
||||
std::array<char, 1024> error;
|
||||
mjModel* m = mj_loadXML(xml_path.c_str(), 0, error.data(), error.size());
|
||||
EXPECT_THAT(error.data(), HasSubstr(
|
||||
"XML Error: Element size must be a multiple of dim+1"));
|
||||
EXPECT_THAT(error.data(), HasSubstr("XML Error: Error: Invalid node tag"));
|
||||
mj_deleteModel(m);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user