diff --git a/src/user/user_util.cc b/src/user/user_util.cc index 5df993d4..0099dbcc 100644 --- a/src/user/user_util.cc +++ b/src/user/user_util.cc @@ -1140,7 +1140,13 @@ std::vector FileToMemory(const char* filename) { return {}; } - std::vector buffer(long_filesize); + std::vector buffer; + try { + buffer.resize(long_filesize); + } catch (...) { + fclose(fp); + return {}; + } // go back to start of file if (fseek(fp, 0, SEEK_SET) != 0) { diff --git a/src/user/user_vfs.cc b/src/user/user_vfs.cc index 80e1f323..4b4a736a 100644 --- a/src/user/user_vfs.cc +++ b/src/user/user_vfs.cc @@ -251,7 +251,12 @@ int mj_addBufferVFS(mjVFS* vfs, const char* name, const void* buffer, if (!(file = cvfs->AddFile(FilePath(name), std::move(inbuffer), 0))) { return 2; // AddFile failed, repeated name } - file->filedata.reserve(nbuffer); + try { + file->filedata.reserve(nbuffer); + } catch (...) { + cvfs->DeleteFile(file->filename); // delete file on error + return -1; + } file->filestamp = vfs_memcpy(file->filedata, buffer, nbuffer); return 0; }