ethereumclassic / explorer

EthereumClassic Block Explorer
MIT License
264 stars 251 forks source link

bug: Santize address string in search #317

Closed YazzyYaz closed 3 years ago

YazzyYaz commented 5 years ago

Issue:

When typing a wrong address or one with whitespaces into Kotti or Morden Explorer, we error out the explorer.

How to Fix:

We can sanitize the address with web3.js which is already imported in the explorer.

Steps to Recreate:

1) Type in Wrong Address or Address with Whitespace into Search Bar for Kotti or Morden explorer. 0x5295f37f1b570e544d3171549ceadd74de88f004 or wrong address. 2) Error in Logs:

1|mordenExploder  | Error: Error: [number-to-bn] while converting number 3.1117152065170827e+32 to BN.js instance, error: invalid number value. Value must be an integer, hex string, BN or BigNumber instance. Note, decimals are not supported. Given value: "3.1117152065170827e+32"
1|mordenExploder  | [1]     at toBN (/home/enos/explorerMorden/node_modules/web3-utils/dist/web3-utils.cjs.js:32:11)
1|mordenExploder  | [1]     at Object.numberToHex (/home/enos/explorerMorden/node_modules/web3-utils/dist/web3-utils.cjs.js:116:16)
1|mordenExploder  | [1]     at Object.inputBlockNumberFormatter (/home/enos/explorerMorden/node_modules/web3-core-helpers/dist/web3-core-helpers.cjs.js:36:16)
1|mordenExploder  | [1]     at GetBlockMethod.beforeExecution (/home/enos/explorerMorden/node_modules/web3-core-method/dist/web3-core-method.cjs.js:202:44)
1|mordenExploder  | [1]     at GetBlockMethod.beforeExecution (/home/enos/explorerMorden/node_modules/web3-eth/dist/web3-eth.cjs.js:110:80)
1|mordenExploder  | [1]     at GetBlockMethod._callee$ (/home/enos/explorerMorden/node_modules/web3-core-method/dist/web3-core-method.cjs.js:88:22)
1|mordenExploder  | [1]     at tryCatch (/home/enos/explorerMorden/node_modules/regenerator-runtime/runtime.js:45:40)
1|mordenExploder  | [1]     at Generator.invoke [as _invoke] (/home/enos/explorerMorden/node_modules/regenerator-runtime/runtime.js:271:22)
1|mordenExploder  | [1]     at Generator.prototype.(anonymous function) [as next] (/home/enos/explorerMorden/node_modules/regenerator-runtime/runtime.js:97:21)

------

1|mordenExploder  | [1]     at asyncGeneratorStep (/home/enos/explorerMorden/node_modules/@babel/runtime/helpers/asyncToGenerator.js:3:24)
1|mordenExploder  | [1]     at _next (/home/enos/explorerMorden/node_modules/@babel/runtime/helpers/asyncToGenerator.js:25:9)
1|mordenExploder  | [1]     at /home/enos/explorerMorden/node_modules/@babel/runtime/helpers/asyncToGenerator.js:32:7
1|mordenExploder  | [1]     at new Promise (<anonymous>)
1|mordenExploder  | [1]     at GetBlockMethod.<anonymous> (/home/enos/explorerMorden/node_modules/@babel/runtime/helpers/asyncToGenerator.js:21:12)
1|mordenExploder  | [1]     at GetBlockMethod.execute (/home/enos/explorerMorden/node_modules/web3-core-method/dist/web3-core-method.cjs.js:122:25)
1|mordenExploder  | [1]     at Proxy.RpcMethod (/home/enos/explorerMorden/node_modules/web3-core-method/dist/web3-core-method.cjs.js:588:25)
1|mordenExploder  | [1] Error: Error: [number-to-bn] while converting 
YazzyYaz commented 5 years ago

Example of fix on other sanitized search explorer: https://github.com/gobitfly/etherchain-light/blob/master/routes/search.js

realcodywburns commented 5 years ago

can you use a regex filter to make sure the address is formatted w/o making an external call?

var regex = /^0x[a-fA-F0-9]{40}$/;
addr1 = "0x5295f37f1b570e544d3171549ceadd74de88f004 ";
addr2 = "0x5295f37f1b570e544d3171549ceadd74de88f004"
var result1 = regex.test(addr1);
var result2 = regex.test(addr2);

console.log( result1, result2 );
> false true
YazzyYaz commented 5 years ago

For sure, and just catch the error and alert the user or something. I'll try to work on it this week after another deliverable.