Bläddra i källkod

Fix some potential buffer overflow issues.
Not critical, but better to avoid them!

Godzil 4 år sedan
förälder
incheckning
efa47f28ca
1 ändrade filer med 9 tillägg och 2 borttagningar
  1. 9 2
      source/shapes/objfile.cpp

+ 9 - 2
source/shapes/objfile.cpp

@@ -53,7 +53,8 @@ OBJFile::OBJFile(const char *filepath) : OBJFile()
     {
         fseek(fp, 0, SEEK_END);
         fileSize = ftell(fp);
-        fileBuff = (char *)calloc(fileSize, 1);
+        /* Add one byte to the size to make sure it is null terminated */
+        fileBuff = (char *)calloc(fileSize + 1, 1);
         fseek(fp, 0, SEEK_SET);
         fileSize = fread(fileBuff, 1, fileSize, fp);
         fclose(fp);
@@ -221,7 +222,7 @@ int OBJFile::parseOBJFile(const char *content)
     /* I don't think we will handle lines of more than 512 characters... */
     char lineBuff[MAX_LINE_LENGTH];
     uint32_t currentLineNum = 1;
-
+    uint32_t totalLength = strlen(content);
     /* Need to process line by line */
     const char *bufferPos = content;
     const char *lineNewline;
@@ -249,6 +250,12 @@ int OBJFile::parseOBJFile(const char *content)
         this->parseLine(lineBuff, currentLineNum);
 
         bufferPos += lineLength + 1;
+
+        if ((bufferPos - content) >= totalLength)
+        {
+            /* We are past the length of the buffer, don't need to continue */
+            break;
+        }
         currentLineNum++;
     }
     return 0;