From e9fac38bbb19aa997a2fd530c997038613b0923e Mon Sep 17 00:00:00 2001 From: Liv Date: Tue, 23 May 2017 13:08:50 -0700 Subject: [PATCH] Add function hasValidScriptSuffix and check if script extensions are JavaScript or JSON files --- libraries/script-engine/src/ScriptEngine.cpp | 15 +++++++++++++++ libraries/script-engine/src/ScriptEngine.h | 1 + 2 files changed, 16 insertions(+) diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index 8bbb9a3e2c..ffd26cb9fb 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -425,6 +425,15 @@ QString ScriptEngine::getFilename() const { return lastPart; } +bool ScriptEngine::hasValidScriptSuffix(const QString& scriptFileName) { + QFileInfo fileInfo(scriptFileName); + QString scriptSuffixToLower = fileInfo.completeSuffix().toLower(); + if (scriptSuffixToLower == "js" || scriptSuffixToLower == "json") { + return true; + } + return false; +} + void ScriptEngine::loadURL(const QUrl& scriptURL, bool reload) { if (_isRunning) { return; @@ -434,6 +443,12 @@ void ScriptEngine::loadURL(const QUrl& scriptURL, bool reload) { _fileNameString = url.toString(); _isReloading = reload; + // Check that script is an actual script + if (!hasValidScriptSuffix(_fileNameString)) { + qCDebug(scriptengine) << "File extension of file: " + _fileNameString + " is not a currently supported script type"; + return; + } + const auto maxRetries = 0; // for consistency with previous scriptCache->getScript() behavior auto scriptCache = DependencyManager::get(); scriptCache->getScriptContents(url.toString(), [this](const QString& url, const QString& scriptContents, bool isURL, bool success, const QString&status) { diff --git a/libraries/script-engine/src/ScriptEngine.h b/libraries/script-engine/src/ScriptEngine.h index bdb14dfe8c..0323ff19e5 100644 --- a/libraries/script-engine/src/ScriptEngine.h +++ b/libraries/script-engine/src/ScriptEngine.h @@ -146,6 +146,7 @@ public: /// to run... NOTE - this is used by Application currently to load the url. We don't really want it to be exposed /// to scripts. we may not need this to be invokable void loadURL(const QUrl& scriptURL, bool reload); + bool hasValidScriptSuffix(const QString& scriptFileName); Q_INVOKABLE QString getContext() const; Q_INVOKABLE bool isClientScript() const { return _context == CLIENT_SCRIPT; }