From dfd15cadab0867157eec52e933bb7e5b28b2e7e2 Mon Sep 17 00:00:00 2001 From: James Turner Date: Fri, 17 Jan 2014 17:26:29 +0000 Subject: [PATCH] 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. --- simgear/misc/sg_path.cxx | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/simgear/misc/sg_path.cxx b/simgear/misc/sg_path.cxx index e0572e19..6c619452 100644 --- a/simgear/misc/sg_path.cxx +++ b/simgear/misc/sg_path.cxx @@ -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; -- 2.39.5