parent
5a9a733ef2
commit
4d457a81a2
@ -0,0 +1,34 @@ |
||||
var name = 'String Length: ' |
||||
var desc = 'Bytes length != String length' |
||||
var categories = require('./categories') |
||||
var common = require('./staticAnalysisCommon') |
||||
|
||||
function stringBytesLength () { |
||||
this.stringToBytesConversions = [] |
||||
this.bytesLengthChecks = [] |
||||
} |
||||
|
||||
stringBytesLength.prototype.visit = function (node) { |
||||
if (common.isStringToBytesConversion(node)) this.stringToBytesConversions.push(node) |
||||
else if (common.isBytesLengthCheck(node)) this.bytesLengthChecks.push(node) |
||||
} |
||||
|
||||
stringBytesLength.prototype.report = function (compilationResults) { |
||||
if (this.stringToBytesConversions.length > 0 && this.bytesLengthChecks.length > 0) { |
||||
return [{ |
||||
warning: 'Bytes and string length are not the same since strings are assumed to be UTF-8 encoded (according to the ABI defintion) therefore one character is not nessesarily encoded in one byte of data.', |
||||
location: this.bytesLengthChecks[0], |
||||
more: 'https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI#argument-encoding' |
||||
}] |
||||
} else { |
||||
return [] |
||||
} |
||||
} |
||||
|
||||
module.exports = { |
||||
name: name, |
||||
description: desc, |
||||
category: categories.MISC, |
||||
Module: stringBytesLength |
||||
} |
||||
|
Loading…
Reference in new issue