From 2bbeac6597f225f9d93bdaed9f1e103a67b87ea5 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 10 Mar 2016 10:42:45 -0800 Subject: [PATCH] short circuit asset request for invalid hash --- libraries/networking/src/AssetRequest.cpp | 9 +++++++++ libraries/networking/src/AssetRequest.h | 1 + libraries/networking/src/AssetResourceRequest.cpp | 12 +++--------- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/libraries/networking/src/AssetRequest.cpp b/libraries/networking/src/AssetRequest.cpp index f2e347e0f7..95812d5a52 100644 --- a/libraries/networking/src/AssetRequest.cpp +++ b/libraries/networking/src/AssetRequest.cpp @@ -35,6 +35,15 @@ void AssetRequest::start() { qCWarning(asset_client) << "AssetRequest already started."; return; } + + // in case we haven't parsed a valid hash, return an error now + if (isValidHash(_hash)) { + _result = InvalidHash; + _state = Finished; + + emit finished(this); + return; + } // Try to load from cache _data = loadFromCache(getUrl()); diff --git a/libraries/networking/src/AssetRequest.h b/libraries/networking/src/AssetRequest.h index ac4485a683..b98ac4ec4b 100644 --- a/libraries/networking/src/AssetRequest.h +++ b/libraries/networking/src/AssetRequest.h @@ -34,6 +34,7 @@ public: NoError, NotFound, InvalidByteRange, + InvalidHash, HashVerificationFailed, NetworkError, UnknownError diff --git a/libraries/networking/src/AssetResourceRequest.cpp b/libraries/networking/src/AssetResourceRequest.cpp index a896f94c8c..587eca6b0b 100644 --- a/libraries/networking/src/AssetResourceRequest.cpp +++ b/libraries/networking/src/AssetResourceRequest.cpp @@ -109,15 +109,6 @@ void AssetResourceRequest::requestMappingForPath(const AssetPath& path) { void AssetResourceRequest::requestHash(const AssetHash& hash) { - // in case we haven't parsed a valid hash, return an error now - if (hash.length() != SHA256_HASH_HEX_LENGTH) { - _result = InvalidURL; - _state = Finished; - - emit finished(); - return; - } - // Make request to atp auto assetClient = DependencyManager::get(); _assetRequest = assetClient->createRequest(hash); @@ -133,6 +124,9 @@ void AssetResourceRequest::requestHash(const AssetHash& hash) { _data = req->getData(); _result = Success; break; + case AssetRequest::InvalidHash: + _result = InvalidURL; + break; case AssetRequest::Error::NotFound: _result = NotFound; break;