From ff5d339e4841074aa39ca6950b17adbabad2c44e Mon Sep 17 00:00:00 2001 From: Nimrod Gileadi Date: Mon, 5 Aug 2024 02:40:19 -0700 Subject: [PATCH] GMSH loading: Check that std::stoi isn't out of range. PiperOrigin-RevId: 659485119 Change-Id: I584ba33f87dbe3b87a8c4fb90feb8963106115da --- src/user/user_flexcomp.cc | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/user/user_flexcomp.cc b/src/user/user_flexcomp.cc index 5dfc6943..18f9dbdd 100644 --- a/src/user/user_flexcomp.cc +++ b/src/user/user_flexcomp.cc @@ -20,6 +20,7 @@ #include #include #include +#include #include #include @@ -1350,7 +1351,12 @@ void mjCFlexcomp::LoadGMSH22(char* buffer, int binary, int nodeend, char maxNodeTagChar[11] = {0}; ReadStrFromBuffer(maxNodeTagChar, buffer + nodebegin, std::min(10, nodeend - nodebegin)); size_t measuredHeaderSize = strnlen(maxNodeTagChar, 10) - 1; - size_t maxNodeTag = std::stoi(maxNodeTagChar); + size_t maxNodeTag; + try { + maxNodeTag = std::stoi(maxNodeTagChar); + } catch (const std::out_of_range& e) { + throw mjCError(NULL, "Invalid number of nodes"); + } numNodes = maxNodeTag; // check number of nodes is a positive number @@ -1490,7 +1496,12 @@ void mjCFlexcomp::LoadGMSH22(char* buffer, int binary, int nodeend, char maxElementTagChar[11] = {0}; ReadStrFromBuffer(maxElementTagChar, buffer + elembegin, std::min(10, elemend - elembegin)); int measuredHeaderSize = strnlen(maxElementTagChar, 10) - 1; - int maxElementTag = std::stoi(maxElementTagChar); + int maxElementTag; + try { + maxElementTag = std::stoi(maxElementTagChar); + } catch (const std::out_of_range& e) { + throw mjCError(NULL, "Invalid number of elements"); + } int numElements = maxElementTag; int tag, numTags; int nodeTag;