ethereumjs-abi icon indicating copy to clipboard operation
ethereumjs-abi copied to clipboard

parseSignature breaks on zero input params

Open kumavis opened this issue 8 years ago • 2 comments

src: https://github.com/ethereumjs/ethereumjs-abi/blob/master/lib/index.js#L81-L83

works

/^(\w+)\((.+)\)$/.exec('hi(bytes)')
["hi(bytes)", "hi", "bytes"]

breaks

/^(\w+)\((.+)\)$/.exec('hi()')
null

kumavis avatar Nov 11 '16 01:11 kumavis

this seems to work, will PR

// someMethod()
// someMethod(bytes,uint)
// someMethod(bytes,uint):(boolean)
function parseSignature (sigString) {
  var methodEndIndex = sigString.indexOf('(')
  if (methodEndIndex === -1) {
    throw new Error('Invalid method signature')
  }
  var methodName = sigString.slice(0,methodEndIndex)
  var allArgs = sigString.slice(methodEndIndex+1,-1)
  var [ inputArgs, outputArgs ] = allArgs.split(':')

  return {
    method: methodName,
    args: (inputArgs ? inputArgs.split(',') : []),
    retargs: (outputArgs ? outputArgs.split(',') : null),
  }
}

kumavis avatar Nov 11 '16 02:11 kumavis

In order to handle "someMethod():(boolean)" you might consider changing

var [ inputArgs, outputArgs ] = allArgs.split(':')

to

var [ inputArgs, outputArgs ] = allArgs.split('):(')

mcgwiz avatar Nov 21 '18 10:11 mcgwiz