From 0331c76f8c864db55e988ff0c4648488bef1cec1 Mon Sep 17 00:00:00 2001 From: McSam Date: Thu, 20 Jun 2019 14:39:17 +0800 Subject: [PATCH 1/5] xml error --- src/botPage/view/blockly/index.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/botPage/view/blockly/index.js b/src/botPage/view/blockly/index.js index 0636724381..9c3981bd33 100644 --- a/src/botPage/view/blockly/index.js +++ b/src/botPage/view/blockly/index.js @@ -317,6 +317,18 @@ export default class _Blockly { load(blockStr = '', dropEvent = {}) { let xml; + try { + const xmlDoc = new DOMParser().parseFromString(blockStr, 'application/xml'); + + if (xmlDoc.getElementsByTagName('parsererror').length > 0) { + globalObserver.emit('ui.log.warn', `${translate('Unrecognized file format')}`); + return; + } + } catch (err) { + globalObserver.emit('ui.log.warn', `${translate('Unrecognized file format')}`); + return; + } + try { xml = Blockly.Xml.textToDom(blockStr); } catch (e) { From dd57fa1e8e7e13a085f685a46208512a214732d5 Mon Sep 17 00:00:00 2001 From: McSam Date: Mon, 24 Jun 2019 13:36:08 +0800 Subject: [PATCH 2/5] resolve issues by QA --- src/botPage/view/blockly/index.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/botPage/view/blockly/index.js b/src/botPage/view/blockly/index.js index 9c3981bd33..e951568af6 100644 --- a/src/botPage/view/blockly/index.js +++ b/src/botPage/view/blockly/index.js @@ -331,6 +331,21 @@ export default class _Blockly { try { xml = Blockly.Xml.textToDom(blockStr); + const blocklyXml = xml.querySelectorAll('block'); + + if (blocklyXml.length <= 0) { + globalObserver.emit('ui.log.warn', `${translate('Unrecognized file format')}`); + return; + } + + blocklyXml.forEach(block => { + const blockType = block.attributes.type.nodeValue; + + if (!Object.keys(Blockly.Blocks).includes(blockType)) { + globalObserver.emit('ui.log.warn', `${translate('Unrecognized file format')}`); + throw createError('FileLoad', translate('Unrecognized file format')); + } + }); } catch (e) { throw createError('FileLoad', translate('Unrecognized file format')); } From adfd1a3e598934999ba7181ad21b56605f243f10 Mon Sep 17 00:00:00 2001 From: McSam Date: Wed, 26 Jun 2019 16:04:22 +0800 Subject: [PATCH 3/5] copywriters --- src/botPage/view/blockly/index.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/botPage/view/blockly/index.js b/src/botPage/view/blockly/index.js index e951568af6..25e501f3ce 100644 --- a/src/botPage/view/blockly/index.js +++ b/src/botPage/view/blockly/index.js @@ -334,7 +334,12 @@ export default class _Blockly { const blocklyXml = xml.querySelectorAll('block'); if (blocklyXml.length <= 0) { - globalObserver.emit('ui.log.warn', `${translate('Unrecognized file format')}`); + globalObserver.emit( + 'ui.log.warn', + `${translate( + 'Unsupported strategy. Binary Bot only accepts XML scripts from Binary.com sources. Please load a supported file.' + )}` + ); return; } From 47d1bf0fa16cbcc777fd53bcfa30612c7c374a18 Mon Sep 17 00:00:00 2001 From: McSam Date: Thu, 27 Jun 2019 15:07:54 +0800 Subject: [PATCH 4/5] resolve changes --- src/botPage/bot/TradeEngine/Total.js | 2 +- src/botPage/bot/TradeEngine/index.js | 2 +- src/botPage/bot/sanitize.js | 2 +- src/botPage/common/error.js | 10 ++++- src/botPage/view/blockly/index.js | 55 ++++++++++++++-------------- 5 files changed, 38 insertions(+), 33 deletions(-) diff --git a/src/botPage/bot/TradeEngine/Total.js b/src/botPage/bot/TradeEngine/Total.js index 355c7c6446..64a567e559 100644 --- a/src/botPage/bot/TradeEngine/Total.js +++ b/src/botPage/bot/TradeEngine/Total.js @@ -1,7 +1,7 @@ import { translate } from '../../../common/i18n'; import { roundBalance } from '../../common/tools'; import { info, notify } from '../broadcast'; -import createError from '../../common/error'; +import { createError } from '../../common/error'; import { observer as globalObserver } from '../../../common/utils/observer'; const skeleton = { diff --git a/src/botPage/bot/TradeEngine/index.js b/src/botPage/bot/TradeEngine/index.js index 9af841a0b8..aaec4f3c65 100644 --- a/src/botPage/bot/TradeEngine/index.js +++ b/src/botPage/bot/TradeEngine/index.js @@ -3,7 +3,7 @@ import { createStore, applyMiddleware } from 'redux'; import thunk from 'redux-thunk'; import { durationToSecond } from '../../../common/utils/tools'; import { translate } from '../../..//common/i18n'; -import createError from '../../common/error'; +import { createError } from '../../common/error'; import { doUntilDone } from '../tools'; import { expectInitArg, expectTradeOptions } from '../sanitize'; import Proposal from './Proposal'; diff --git a/src/botPage/bot/sanitize.js b/src/botPage/bot/sanitize.js index e5e07b6525..26c5244b8c 100644 --- a/src/botPage/bot/sanitize.js +++ b/src/botPage/bot/sanitize.js @@ -1,5 +1,5 @@ import { translate } from '../../common/i18n'; -import createError from '../common/error'; +import { createError } from '../common/error'; const isPositiveNumber = num => Number.isFinite(num) && num > 0; diff --git a/src/botPage/common/error.js b/src/botPage/common/error.js index 50ba49bf20..69458cfdb2 100644 --- a/src/botPage/common/error.js +++ b/src/botPage/common/error.js @@ -1,7 +1,13 @@ -const createError = (name, message) => { +import { observer as globalObserver } from '../../common/utils/observer'; +import { translate } from '../../common/i18n'; + +export const createError = (name, message) => { const e = new Error(message); e.name = name; return e; }; -export default createError; +export const createErrorAndEmit = (name, message) => { + globalObserver.emit('ui.log.warn', `${translate(message)}`); + return createError(name, message); +}; diff --git a/src/botPage/view/blockly/index.js b/src/botPage/view/blockly/index.js index 25e501f3ce..cac7853545 100644 --- a/src/botPage/view/blockly/index.js +++ b/src/botPage/view/blockly/index.js @@ -16,7 +16,7 @@ import { cleanBeforeExport, } from './utils'; import Interpreter from '../../bot/Interpreter'; -import createError from '../../common/error'; +import { createErrorAndEmit } from '../../common/error'; import { translate, xml as translateXml } from '../../../common/i18n'; import { getLanguage } from '../../../common/lang'; import { observer as globalObserver } from '../../../common/utils/observer'; @@ -315,46 +315,45 @@ export default class _Blockly { } /* eslint-disable class-methods-use-this */ load(blockStr = '', dropEvent = {}) { - let xml; + const unrecognisedMsg = () => translate('Unrecognized file format'); try { const xmlDoc = new DOMParser().parseFromString(blockStr, 'application/xml'); - if (xmlDoc.getElementsByTagName('parsererror').length > 0) { - globalObserver.emit('ui.log.warn', `${translate('Unrecognized file format')}`); - return; + if (xmlDoc.getElementsByTagName('parsererror').length) { + throw 0; } } catch (err) { - globalObserver.emit('ui.log.warn', `${translate('Unrecognized file format')}`); - return; + throw createErrorAndEmit('FileLoad', unrecognisedMsg()); } + let xml; try { xml = Blockly.Xml.textToDom(blockStr); - const blocklyXml = xml.querySelectorAll('block'); - - if (blocklyXml.length <= 0) { - globalObserver.emit( - 'ui.log.warn', - `${translate( - 'Unsupported strategy. Binary Bot only accepts XML scripts from Binary.com sources. Please load a supported file.' - )}` - ); - return; - } + } catch (e) { + throw createErrorAndEmit('FileLoad', unrecognisedMsg()); + } - blocklyXml.forEach(block => { - const blockType = block.attributes.type.nodeValue; + const blocklyXml = xml.querySelectorAll('block'); - if (!Object.keys(Blockly.Blocks).includes(blockType)) { - globalObserver.emit('ui.log.warn', `${translate('Unrecognized file format')}`); - throw createError('FileLoad', translate('Unrecognized file format')); - } - }); - } catch (e) { - throw createError('FileLoad', translate('Unrecognized file format')); + if (!blocklyXml.length) { + throw createErrorAndEmit( + 'FileLoad', + 'XML file contains unsupported elements. Please check or modify file.' + ); } + blocklyXml.forEach(block => { + const blockType = block.attributes.type.nodeValue; + + if (!Object.keys(Blockly.Blocks).includes(blockType)) { + throw createErrorAndEmit( + 'FileLoad', + 'XML file contains unsupported elements. Please check or modify file' + ); + } + }); + try { if (xml.hasAttribute('collection') && xml.getAttribute('collection') === 'true') { loadBlocks(xml, dropEvent); @@ -362,7 +361,7 @@ export default class _Blockly { loadWorkspace(xml); } } catch (e) { - throw createError('FileLoad', translate('Unable to load the block file')); + throw createErrorAndEmit('FileLoad', translate('Unable to load the block file')); } } /* eslint-disable class-methods-use-this */ From c31b133ec8ba23067dd2a0f9327a4f3db177a8c0 Mon Sep 17 00:00:00 2001 From: McSam Date: Thu, 27 Jun 2019 15:13:37 +0800 Subject: [PATCH 5/5] eslint & resolve changes --- src/botPage/view/blockly/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/botPage/view/blockly/index.js b/src/botPage/view/blockly/index.js index cac7853545..6e35a889c0 100644 --- a/src/botPage/view/blockly/index.js +++ b/src/botPage/view/blockly/index.js @@ -321,7 +321,7 @@ export default class _Blockly { const xmlDoc = new DOMParser().parseFromString(blockStr, 'application/xml'); if (xmlDoc.getElementsByTagName('parsererror').length) { - throw 0; + throw new Error(); } } catch (err) { throw createErrorAndEmit('FileLoad', unrecognisedMsg()); @@ -344,7 +344,7 @@ export default class _Blockly { } blocklyXml.forEach(block => { - const blockType = block.attributes.type.nodeValue; + const blockType = block.getAttribute('type'); if (!Object.keys(Blockly.Blocks).includes(blockType)) { throw createErrorAndEmit(