0025860: Buffer overrun in TopTools_ShapeSet::Read
authormsv <msv@opencascade.com>
Mon, 2 Mar 2015 13:06:30 +0000 (16:06 +0300)
committerbugmaster <bugmaster@opencascade.com>
Thu, 5 Mar 2015 11:41:35 +0000 (14:41 +0300)
Avoid out of array bounds read/write.

src/TopTools/TopTools_ShapeSet.cxx

index 5c74848..5a81fc7 100644 (file)
@@ -612,8 +612,11 @@ void  TopTools_ShapeSet::Read(Standard_IStream& IS)
     //if(pm = strchr(vers,'\r'))
     //  *pm ='\0';
     
-    for (Standard_Size lv = (strlen(vers)- 1); lv > 1 && (vers[lv] == '\r' || vers[lv] == '\n') ;lv--) 
-      vers[lv] = '\0';
+    Standard_Size lv = strlen(vers);
+    if (lv > 0) {
+      for (lv--; lv > 0 && (vers[lv] == '\r' || vers[lv] == '\n') ;lv--) 
+        vers[lv] = '\0';
+    }
     
   } while ( ! IS.fail() && strcmp(vers,Version) && strcmp(vers,Version2) );
   if (IS.fail()) {