Skip to content

Commit 0406a4e

Browse files
author
Alex Vlasov
committed
additional check for data length and signature in input param decoding
1 parent 5dac4ab commit 0406a4e

File tree

2 files changed

+15
-2
lines changed

2 files changed

+15
-2
lines changed

web3swift/ABIv2/Classes/ABIv2Elements.swift

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,18 @@ extension ABIv2.Element {
142142
}
143143
}
144144

145-
func decodeInputData(_ data: Data) -> [String: Any]? {
145+
func decodeInputData(_ rawData: Data) -> [String: Any]? {
146+
var data = rawData
147+
var sig: Data? = nil
148+
switch rawData.count % 4 {
149+
case 0:
150+
break
151+
case 4:
152+
let sig = rawData[0 ..< 4]
153+
data = rawData[4 ..< rawData.count]
154+
default:
155+
return nil
156+
}
146157
switch self {
147158
case .constructor(let function):
148159
if (data.count == 0 && function.inputs.count == 1) {
@@ -174,6 +185,9 @@ extension ABIv2.Element {
174185
case .fallback(_):
175186
return nil
176187
case .function(let function):
188+
if sig != nil && sig != function.signature {
189+
return nil
190+
}
177191
if (data.count == 0 && function.inputs.count == 1) {
178192
let name = "0"
179193
let value = function.inputs[0].type.emptyValue

web3swift/Web3/Classes/Web3+Contract.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,5 @@ extension web3 {
7070
let parser = EventParser(web3: self.web3, eventName: eventName, contract: self.contract, filter: filter)
7171
return parser
7272
}
73-
7473
}
7574
}

0 commit comments

Comments
 (0)