]> git.mxchange.org Git - simgear.git/commitdiff
Bug-fix - short-circuit path validation.
authorJames Turner <zakalawe@mac.com>
Fri, 17 Jan 2014 17:26:29 +0000 (17:26 +0000)
committerJames Turner <zakalawe@mac.com>
Fri, 17 Jan 2014 17:26:29 +0000 (17:26 +0000)
When an SGPath is empty, don't bother stat()-ing. This avoids
an uninitialized-memory read inside the C-runtime on Windows.

simgear/misc/sg_path.cxx

index e0572e19039c030fa57feca77a33661bb33c90e6..6c6194520e5ebfd4d196400f4a1bb3cb013d52d1 100644 (file)
@@ -312,13 +312,20 @@ void SGPath::validate() const
     return;
   }
 
+  if (path.empty()) {
+         _exists = false;
+         return;
+  }
+
 #ifdef _WIN32
   struct _stat buf ;
-
   bool remove_trailing = false;
-  if ( path.length() > 1 && path[path.length()-1] == '/' )
-      remove_trailing=true;
-  if (_stat (path.substr(0,remove_trailing?path.length()-1:path.length()).c_str(), &buf ) < 0) {
+  string statPath(path);
+  if ((path.length() > 1) && (path.back() == '/')) {
+         statPath.pop_back();
+  }
+      
+  if (_stat(statPath.c_str(), &buf ) < 0) {
     _exists = false;
   } else {
     _exists = true;