2020年9月17日,solidity官方发现该漏洞。
影响范围 version < 0.7.3, 中危。
如果有两个长度不相等的动态数组类型。
将较短的数组赋值给较长的数组时,并不会完全清除较长数组的值。
举例如下:
contract C {
uint128[] x; // 较长数组
function f() public returns(uint128[] memory) {
x.push(42); x.push(42); x.push(42); x.push(42);
uint128[] memory y = new uint128[](1);
y[0] = 23; // 较短数组
x = y;
x.push(); x.push(); x.push();
return x; // 返回[23,0,0,42] 而非 [23,0,0,0]
}
}