From 1a7177f2584497c57c665e9640d622cb361ca883 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaakko=20Ker=C3=A4nen?= Date: Sun, 22 Feb 2015 20:04:08 +0200 Subject: [PATCH] Fixed|libcore|ScriptSystem: Possible crash when importing modules The sorting predicate was not correct (not a bool), which could confuse MSVC's std::list. --- doomsday/sdk/libcore/src/scriptsys/scriptsystem.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/doomsday/sdk/libcore/src/scriptsys/scriptsystem.cpp b/doomsday/sdk/libcore/src/scriptsys/scriptsystem.cpp index e3ece0aa07..5238104b8d 100644 --- a/doomsday/sdk/libcore/src/scriptsys/scriptsystem.cpp +++ b/doomsday/sdk/libcore/src/scriptsys/scriptsystem.cpp @@ -282,9 +282,11 @@ StringList ScriptSystem::nativeModules() const return d->nativeModules.keys(); } -static int sortFilesByModifiedAt(File const *a, File const *b) -{ - return de::cmp(a->status().modifiedAt, b->status().modifiedAt); +namespace internal { + static bool sortFilesByModifiedAt(File *a, File *b) { + DENG2_ASSERT(a != b); + return de::cmp(a->status().modifiedAt, b->status().modifiedAt) < 0; + } } File const *ScriptSystem::tryFindModuleSource(String const &name, String const &localPath) @@ -337,7 +339,7 @@ File const *ScriptSystem::tryFindModuleSource(String const &name, String const & { continue; } - matching.sort(sortFilesByModifiedAt); + matching.sort(internal::sortFilesByModifiedAt); found = matching.back(); LOG_SCR_VERBOSE("Chose ") << found->path() << " out of " << dint(matching.size()) << " candidates (latest modified)";