From 1043633cc366a4a563ab74b0bf6c07a306a47ca7 Mon Sep 17 00:00:00 2001 From: Kyle Bayes Date: Thu, 24 Oct 2024 05:36:15 -0700 Subject: [PATCH] Remove arbitrary limit of a 1000 elements from certain attributes. Fixes #2166. PiperOrigin-RevId: 689343609 Change-Id: I7cbf5007884433807c76c6c309cb4a858479d34d --- src/xml/xml_native_reader.cc | 38 +++++++++++++++++------------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/src/xml/xml_native_reader.cc b/src/xml/xml_native_reader.cc index 17fe2609..f145afbd 100644 --- a/src/xml/xml_native_reader.cc +++ b/src/xml/xml_native_reader.cc @@ -4258,8 +4258,6 @@ void mjXReader::Sensor(XMLElement* section) { // keyframe section parser void mjXReader::Keyframe(XMLElement* section) { XMLElement* elem; - int n; - double data[1000]; // iterate over child elements elem = FirstChildElement(section); @@ -4275,39 +4273,39 @@ void mjXReader::Keyframe(XMLElement* section) { ReadAttr(elem, "time", 1, &key->time, text); // read qpos - n = ReadAttr(elem, "qpos", 1000, data, text, false, false); - if (n) { - mjs_setDouble(key->qpos, data, n); + auto maybe_data = ReadAttrVec(elem, "qpos", false); + if (maybe_data.has_value()) { + mjs_setDouble(key->qpos, maybe_data->data(), maybe_data->size()); } // read qvel - n = ReadAttr(elem, "qvel", 1000, data, text, false, false); - if (n) { - mjs_setDouble(key->qvel, data, n); + maybe_data = ReadAttrVec(elem, "qvel", false); + if (maybe_data.has_value()) { + mjs_setDouble(key->qvel, maybe_data->data(), maybe_data->size()); } // read act - n = ReadAttr(elem, "act", 1000, data, text, false, false); - if (n) { - mjs_setDouble(key->act, data, n); + maybe_data = ReadAttrVec(elem, "act", false); + if (maybe_data.has_value()) { + mjs_setDouble(key->act, maybe_data->data(), maybe_data->size()); } // read mpos - n = ReadAttr(elem, "mpos", 1000, data, text, false, false); - if (n) { - mjs_setDouble(key->mpos, data, n); + maybe_data = ReadAttrVec(elem, "mpos", false); + if (maybe_data.has_value()) { + mjs_setDouble(key->mpos, maybe_data->data(), maybe_data->size()); } // read mquat - n = ReadAttr(elem, "mquat", 1000, data, text, false, false); - if (n) { - mjs_setDouble(key->mquat, data, n); + maybe_data = ReadAttrVec(elem, "mquat", false); + if (maybe_data.has_value()) { + mjs_setDouble(key->mquat, maybe_data->data(), maybe_data->size()); } // read ctrl - n = ReadAttr(elem, "ctrl", 1000, data, text, false, false); - if (n) { - mjs_setDouble(key->ctrl, data, n); + maybe_data = ReadAttrVec(elem, "ctrl", false); + if (maybe_data.has_value()) { + mjs_setDouble(key->ctrl, maybe_data->data(), maybe_data->size()); } // advance to next element