Bug-fix - short-circuit path validation.

When an SGPath is empty, don't bother stat()-ing. This avoids
an uninitialized-memory read inside the C-runtime on Windows.
This commit is contained in:
James Turner 2014-01-17 17:26:29 +00:00
parent 1613257bdc
commit dfd15cadab

View File

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