From 16d618e7b9fafe69f56d347550ada1d4d14222cc Mon Sep 17 00:00:00 2001 From: Haroon Qureshi Date: Thu, 12 Mar 2026 04:05:29 -0700 Subject: [PATCH] Ensure we have a valid vfs when loading a spec. PiperOrigin-RevId: 882503274 Change-Id: Iddbd6f00c0344bb34d68bb72a640c0a8e81076a2 --- src/experimental/platform/model_holder.cc | 7 ++++--- src/experimental/platform/model_holder.h | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/experimental/platform/model_holder.cc b/src/experimental/platform/model_holder.cc index a59105be..78bbc4cc 100644 --- a/src/experimental/platform/model_holder.cc +++ b/src/experimental/platform/model_holder.cc @@ -61,6 +61,10 @@ std::unique_ptr ModelHolder::FromBuffer( return mh; } +ModelHolder::ModelHolder() { + mj_defaultVFS(&vfs_); +} + ModelHolder::~ModelHolder() { if (data_) { mj_deleteData(data_); @@ -94,7 +98,6 @@ void ModelHolder::InitFromSpec(mjSpec* spec) { } void ModelHolder::InitFromFile(std::string_view filepath) { - mj_defaultVFS(&vfs_); if (filepath.ends_with(".mjb")) { model_ = mj_loadModel(filepath.data(), &vfs_); } else { @@ -108,8 +111,6 @@ void ModelHolder::InitFromFile(std::string_view filepath) { void ModelHolder::InitFromBuffer(std::span buffer, std::string_view content_type, std::string_view filename) { - mj_defaultVFS(&vfs_); - if (content_type == "text/xml") { const char* ptr = reinterpret_cast(buffer.data()); spec_ = mj_parseXMLString(ptr, nullptr, error_, sizeof(error_)); diff --git a/src/experimental/platform/model_holder.h b/src/experimental/platform/model_holder.h index e710b25b..e14d2c6a 100644 --- a/src/experimental/platform/model_holder.h +++ b/src/experimental/platform/model_holder.h @@ -64,7 +64,7 @@ class ModelHolder { mjModel* ReleaseModel(); private: - ModelHolder() = default; + ModelHolder(); void InitFromSpec(mjSpec* spec); void InitFromFile(std::string_view filepath); void InitFromBuffer(std::span buffer,