aboutsummaryrefslogtreecommitdiffstats
path: root/app/scripts/controllers
diff options
context:
space:
mode:
authorkumavis <aaron@kumavis.me>2018-11-03 10:14:40 +0800
committerkumavis <aaron@kumavis.me>2018-11-03 10:14:40 +0800
commit2c1bca1ab0a6284b89338d5fd36552583c960f36 (patch)
tree4f00546fe366fe7027f8a9507c8e522258a081da /app/scripts/controllers
parente683684e8d986a24cb6a15ed5eef0030169bf9cf (diff)
downloadtangerine-wallet-browser-2c1bca1ab0a6284b89338d5fd36552583c960f36.tar
tangerine-wallet-browser-2c1bca1ab0a6284b89338d5fd36552583c960f36.tar.gz
tangerine-wallet-browser-2c1bca1ab0a6284b89338d5fd36552583c960f36.tar.bz2
tangerine-wallet-browser-2c1bca1ab0a6284b89338d5fd36552583c960f36.tar.lz
tangerine-wallet-browser-2c1bca1ab0a6284b89338d5fd36552583c960f36.tar.xz
tangerine-wallet-browser-2c1bca1ab0a6284b89338d5fd36552583c960f36.tar.zst
tangerine-wallet-browser-2c1bca1ab0a6284b89338d5fd36552583c960f36.zip
token-rates - protect against bad token data
Diffstat (limited to 'app/scripts/controllers')
-rw-r--r--app/scripts/controllers/token-rates.js11
1 files changed, 7 insertions, 4 deletions
diff --git a/app/scripts/controllers/token-rates.js b/app/scripts/controllers/token-rates.js
index 87d716aa6..b6f084841 100644
--- a/app/scripts/controllers/token-rates.js
+++ b/app/scripts/controllers/token-rates.js
@@ -1,5 +1,5 @@
const ObservableStore = require('obs-store')
-const { warn } = require('loglevel')
+const log = require('loglevel')
// By default, poll every 3 minutes
const DEFAULT_INTERVAL = 180 * 1000
@@ -26,8 +26,11 @@ class TokenRatesController {
async updateExchangeRates () {
if (!this.isActive) { return }
const contractExchangeRates = {}
- for (const i in this._tokens) {
- const address = this._tokens[i].address
+ // copy array to ensure its not modified during iteration
+ const tokens = this._tokens.slice()
+ for (const token of tokens) {
+ if (!token) return log.error(`TokenRatesController - invalid tokens state:\n${JSON.stringify(tokens, null, 2)}`)
+ const address = token.address
contractExchangeRates[address] = await this.fetchExchangeRate(address)
}
this.store.putState({ contractExchangeRates })
@@ -44,7 +47,7 @@ class TokenRatesController {
const json = await response.json()
return json && json.length ? json[0].averagePrice : 0
} catch (error) {
- warn(`MetaMask - TokenRatesController exchange rate fetch failed for ${address}.`, error)
+ log.warn(`MetaMask - TokenRatesController exchange rate fetch failed for ${address}.`, error)
return 0
}
}