diff --git a/Changelog.md b/Changelog.md index ba091f266..f85404b9d 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,6 +1,7 @@ ### 0.8.15 (unreleased) Important Bugfixes: + * Code Generation: Avoid writing dirty bytes to storage when copying ``bytes`` arrays. * Yul Optimizer: Keep all memory side-effects of inline assembly blocks. diff --git a/docs/bugs.json b/docs/bugs.json index bc1bc622e..979f4264f 100644 --- a/docs/bugs.json +++ b/docs/bugs.json @@ -1,4 +1,14 @@ [ + { + "uid": "SOL-2022-5", + "name": "DirtyBytesArrayToStorage", + "summary": "Copying ``bytes`` arrays from memory or calldata to storage may result in dirty storage values.", + "description": "Copying ``bytes`` arrays from memory or calldata to storage is done in chunks of 32 bytes. Thereby, dirty values in calldata or memory can be written to storage, which may then become observable after a ``.push()`` on the bytes array in storage.", + "link": "https://blog.soliditylang.org/2022/06/15/dirty-bytes-array-to-storage-bug/", + "introduced": "0.0.1", + "fixed": "0.8.15", + "severity": "low" + }, { "uid": "SOL-2022-4", "name": "InlineAssemblyMemorySideEffects", diff --git a/docs/bugs_by_version.json b/docs/bugs_by_version.json index 1b0f7d1ca..82eaa8141 100644 --- a/docs/bugs_by_version.json +++ b/docs/bugs_by_version.json @@ -1,6 +1,7 @@ { "0.1.0": { "bugs": [ + "DirtyBytesArrayToStorage", "KeccakCaching", "EmptyByteArrayCopy", "DynamicArrayCleanup", @@ -22,6 +23,7 @@ }, "0.1.1": { "bugs": [ + "DirtyBytesArrayToStorage", "KeccakCaching", "EmptyByteArrayCopy", "DynamicArrayCleanup", @@ -43,6 +45,7 @@ }, "0.1.2": { "bugs": [ + "DirtyBytesArrayToStorage", "KeccakCaching", "EmptyByteArrayCopy", "DynamicArrayCleanup", @@ -64,6 +67,7 @@ }, "0.1.3": { "bugs": [ + "DirtyBytesArrayToStorage", "KeccakCaching", "EmptyByteArrayCopy", "DynamicArrayCleanup", @@ -85,6 +89,7 @@ }, "0.1.4": { "bugs": [ + "DirtyBytesArrayToStorage", "KeccakCaching", "EmptyByteArrayCopy", "DynamicArrayCleanup", @@ -107,6 +112,7 @@ }, "0.1.5": { "bugs": [ + "DirtyBytesArrayToStorage", "KeccakCaching", "EmptyByteArrayCopy", "DynamicArrayCleanup", @@ -129,6 +135,7 @@ }, "0.1.6": { "bugs": [ + "DirtyBytesArrayToStorage", "KeccakCaching", "EmptyByteArrayCopy", "DynamicArrayCleanup", @@ -153,6 +160,7 @@ }, "0.1.7": { "bugs": [ + "DirtyBytesArrayToStorage", "KeccakCaching", "EmptyByteArrayCopy", "DynamicArrayCleanup", @@ -177,6 +185,7 @@ }, "0.2.0": { "bugs": [ + "DirtyBytesArrayToStorage", "KeccakCaching", "EmptyByteArrayCopy", "DynamicArrayCleanup", @@ -202,6 +211,7 @@ }, "0.2.1": { "bugs": [ + "DirtyBytesArrayToStorage", "KeccakCaching", "EmptyByteArrayCopy", "DynamicArrayCleanup", @@ -227,6 +237,7 @@ }, "0.2.2": { "bugs": [ + "DirtyBytesArrayToStorage", "KeccakCaching", "EmptyByteArrayCopy", "DynamicArrayCleanup", @@ -252,6 +263,7 @@ }, "0.3.0": { "bugs": [ + "DirtyBytesArrayToStorage", "KeccakCaching", "EmptyByteArrayCopy", "DynamicArrayCleanup", @@ -279,6 +291,7 @@ }, "0.3.1": { "bugs": [ + "DirtyBytesArrayToStorage", "KeccakCaching", "EmptyByteArrayCopy", "DynamicArrayCleanup", @@ -305,6 +318,7 @@ }, "0.3.2": { "bugs": [ + "DirtyBytesArrayToStorage", "KeccakCaching", "EmptyByteArrayCopy", "DynamicArrayCleanup", @@ -331,6 +345,7 @@ }, "0.3.3": { "bugs": [ + "DirtyBytesArrayToStorage", "KeccakCaching", "EmptyByteArrayCopy", "DynamicArrayCleanup", @@ -356,6 +371,7 @@ }, "0.3.4": { "bugs": [ + "DirtyBytesArrayToStorage", "KeccakCaching", "EmptyByteArrayCopy", "DynamicArrayCleanup", @@ -381,6 +397,7 @@ }, "0.3.5": { "bugs": [ + "DirtyBytesArrayToStorage", "KeccakCaching", "EmptyByteArrayCopy", "DynamicArrayCleanup", @@ -406,6 +423,7 @@ }, "0.3.6": { "bugs": [ + "DirtyBytesArrayToStorage", "KeccakCaching", "EmptyByteArrayCopy", "DynamicArrayCleanup", @@ -429,6 +447,7 @@ }, "0.4.0": { "bugs": [ + "DirtyBytesArrayToStorage", "KeccakCaching", "EmptyByteArrayCopy", "DynamicArrayCleanup", @@ -452,6 +471,7 @@ }, "0.4.1": { "bugs": [ + "DirtyBytesArrayToStorage", "KeccakCaching", "EmptyByteArrayCopy", "DynamicArrayCleanup", @@ -475,6 +495,7 @@ }, "0.4.10": { "bugs": [ + "DirtyBytesArrayToStorage", "KeccakCaching", "EmptyByteArrayCopy", "DynamicArrayCleanup", @@ -497,6 +518,7 @@ }, "0.4.11": { "bugs": [ + "DirtyBytesArrayToStorage", "KeccakCaching", "EmptyByteArrayCopy", "DynamicArrayCleanup", @@ -518,6 +540,7 @@ }, "0.4.12": { "bugs": [ + "DirtyBytesArrayToStorage", "KeccakCaching", "EmptyByteArrayCopy", "DynamicArrayCleanup", @@ -538,6 +561,7 @@ }, "0.4.13": { "bugs": [ + "DirtyBytesArrayToStorage", "KeccakCaching", "EmptyByteArrayCopy", "DynamicArrayCleanup", @@ -558,6 +582,7 @@ }, "0.4.14": { "bugs": [ + "DirtyBytesArrayToStorage", "KeccakCaching", "EmptyByteArrayCopy", "DynamicArrayCleanup", @@ -577,6 +602,7 @@ }, "0.4.15": { "bugs": [ + "DirtyBytesArrayToStorage", "KeccakCaching", "EmptyByteArrayCopy", "DynamicArrayCleanup", @@ -595,6 +621,7 @@ }, "0.4.16": { "bugs": [ + "DirtyBytesArrayToStorage", "ABIDecodeTwoDimensionalArrayMemory", "KeccakCaching", "EmptyByteArrayCopy", @@ -616,6 +643,7 @@ }, "0.4.17": { "bugs": [ + "DirtyBytesArrayToStorage", "ABIDecodeTwoDimensionalArrayMemory", "KeccakCaching", "EmptyByteArrayCopy", @@ -638,6 +666,7 @@ }, "0.4.18": { "bugs": [ + "DirtyBytesArrayToStorage", "ABIDecodeTwoDimensionalArrayMemory", "KeccakCaching", "EmptyByteArrayCopy", @@ -659,6 +688,7 @@ }, "0.4.19": { "bugs": [ + "DirtyBytesArrayToStorage", "ABIDecodeTwoDimensionalArrayMemory", "KeccakCaching", "EmptyByteArrayCopy", @@ -681,6 +711,7 @@ }, "0.4.2": { "bugs": [ + "DirtyBytesArrayToStorage", "KeccakCaching", "EmptyByteArrayCopy", "DynamicArrayCleanup", @@ -703,6 +734,7 @@ }, "0.4.20": { "bugs": [ + "DirtyBytesArrayToStorage", "ABIDecodeTwoDimensionalArrayMemory", "KeccakCaching", "EmptyByteArrayCopy", @@ -725,6 +757,7 @@ }, "0.4.21": { "bugs": [ + "DirtyBytesArrayToStorage", "ABIDecodeTwoDimensionalArrayMemory", "KeccakCaching", "EmptyByteArrayCopy", @@ -747,6 +780,7 @@ }, "0.4.22": { "bugs": [ + "DirtyBytesArrayToStorage", "ABIDecodeTwoDimensionalArrayMemory", "KeccakCaching", "EmptyByteArrayCopy", @@ -769,6 +803,7 @@ }, "0.4.23": { "bugs": [ + "DirtyBytesArrayToStorage", "ABIDecodeTwoDimensionalArrayMemory", "KeccakCaching", "EmptyByteArrayCopy", @@ -790,6 +825,7 @@ }, "0.4.24": { "bugs": [ + "DirtyBytesArrayToStorage", "ABIDecodeTwoDimensionalArrayMemory", "KeccakCaching", "EmptyByteArrayCopy", @@ -811,6 +847,7 @@ }, "0.4.25": { "bugs": [ + "DirtyBytesArrayToStorage", "ABIDecodeTwoDimensionalArrayMemory", "KeccakCaching", "EmptyByteArrayCopy", @@ -830,6 +867,7 @@ }, "0.4.26": { "bugs": [ + "DirtyBytesArrayToStorage", "ABIDecodeTwoDimensionalArrayMemory", "KeccakCaching", "EmptyByteArrayCopy", @@ -846,6 +884,7 @@ }, "0.4.3": { "bugs": [ + "DirtyBytesArrayToStorage", "KeccakCaching", "EmptyByteArrayCopy", "DynamicArrayCleanup", @@ -867,6 +906,7 @@ }, "0.4.4": { "bugs": [ + "DirtyBytesArrayToStorage", "KeccakCaching", "EmptyByteArrayCopy", "DynamicArrayCleanup", @@ -887,6 +927,7 @@ }, "0.4.5": { "bugs": [ + "DirtyBytesArrayToStorage", "KeccakCaching", "EmptyByteArrayCopy", "DynamicArrayCleanup", @@ -910,6 +951,7 @@ }, "0.4.6": { "bugs": [ + "DirtyBytesArrayToStorage", "KeccakCaching", "EmptyByteArrayCopy", "DynamicArrayCleanup", @@ -932,6 +974,7 @@ }, "0.4.7": { "bugs": [ + "DirtyBytesArrayToStorage", "KeccakCaching", "EmptyByteArrayCopy", "DynamicArrayCleanup", @@ -954,6 +997,7 @@ }, "0.4.8": { "bugs": [ + "DirtyBytesArrayToStorage", "KeccakCaching", "EmptyByteArrayCopy", "DynamicArrayCleanup", @@ -976,6 +1020,7 @@ }, "0.4.9": { "bugs": [ + "DirtyBytesArrayToStorage", "KeccakCaching", "EmptyByteArrayCopy", "DynamicArrayCleanup", @@ -998,6 +1043,7 @@ }, "0.5.0": { "bugs": [ + "DirtyBytesArrayToStorage", "ABIDecodeTwoDimensionalArrayMemory", "KeccakCaching", "EmptyByteArrayCopy", @@ -1017,6 +1063,7 @@ }, "0.5.1": { "bugs": [ + "DirtyBytesArrayToStorage", "ABIDecodeTwoDimensionalArrayMemory", "KeccakCaching", "EmptyByteArrayCopy", @@ -1036,6 +1083,7 @@ }, "0.5.10": { "bugs": [ + "DirtyBytesArrayToStorage", "NestedCallataArrayAbiReencodingSizeValidation", "ABIDecodeTwoDimensionalArrayMemory", "KeccakCaching", @@ -1052,6 +1100,7 @@ }, "0.5.11": { "bugs": [ + "DirtyBytesArrayToStorage", "NestedCallataArrayAbiReencodingSizeValidation", "ABIDecodeTwoDimensionalArrayMemory", "KeccakCaching", @@ -1067,6 +1116,7 @@ }, "0.5.12": { "bugs": [ + "DirtyBytesArrayToStorage", "NestedCallataArrayAbiReencodingSizeValidation", "ABIDecodeTwoDimensionalArrayMemory", "KeccakCaching", @@ -1082,6 +1132,7 @@ }, "0.5.13": { "bugs": [ + "DirtyBytesArrayToStorage", "NestedCallataArrayAbiReencodingSizeValidation", "ABIDecodeTwoDimensionalArrayMemory", "KeccakCaching", @@ -1097,6 +1148,7 @@ }, "0.5.14": { "bugs": [ + "DirtyBytesArrayToStorage", "NestedCallataArrayAbiReencodingSizeValidation", "ABIDecodeTwoDimensionalArrayMemory", "KeccakCaching", @@ -1114,6 +1166,7 @@ }, "0.5.15": { "bugs": [ + "DirtyBytesArrayToStorage", "NestedCallataArrayAbiReencodingSizeValidation", "ABIDecodeTwoDimensionalArrayMemory", "KeccakCaching", @@ -1130,6 +1183,7 @@ }, "0.5.16": { "bugs": [ + "DirtyBytesArrayToStorage", "NestedCallataArrayAbiReencodingSizeValidation", "ABIDecodeTwoDimensionalArrayMemory", "KeccakCaching", @@ -1145,6 +1199,7 @@ }, "0.5.17": { "bugs": [ + "DirtyBytesArrayToStorage", "NestedCallataArrayAbiReencodingSizeValidation", "ABIDecodeTwoDimensionalArrayMemory", "KeccakCaching", @@ -1159,6 +1214,7 @@ }, "0.5.2": { "bugs": [ + "DirtyBytesArrayToStorage", "ABIDecodeTwoDimensionalArrayMemory", "KeccakCaching", "EmptyByteArrayCopy", @@ -1178,6 +1234,7 @@ }, "0.5.3": { "bugs": [ + "DirtyBytesArrayToStorage", "ABIDecodeTwoDimensionalArrayMemory", "KeccakCaching", "EmptyByteArrayCopy", @@ -1197,6 +1254,7 @@ }, "0.5.4": { "bugs": [ + "DirtyBytesArrayToStorage", "ABIDecodeTwoDimensionalArrayMemory", "KeccakCaching", "EmptyByteArrayCopy", @@ -1216,6 +1274,7 @@ }, "0.5.5": { "bugs": [ + "DirtyBytesArrayToStorage", "ABIDecodeTwoDimensionalArrayMemory", "KeccakCaching", "EmptyByteArrayCopy", @@ -1237,6 +1296,7 @@ }, "0.5.6": { "bugs": [ + "DirtyBytesArrayToStorage", "ABIDecodeTwoDimensionalArrayMemory", "KeccakCaching", "EmptyByteArrayCopy", @@ -1258,6 +1318,7 @@ }, "0.5.7": { "bugs": [ + "DirtyBytesArrayToStorage", "ABIDecodeTwoDimensionalArrayMemory", "KeccakCaching", "EmptyByteArrayCopy", @@ -1277,6 +1338,7 @@ }, "0.5.8": { "bugs": [ + "DirtyBytesArrayToStorage", "NestedCallataArrayAbiReencodingSizeValidation", "ABIDecodeTwoDimensionalArrayMemory", "KeccakCaching", @@ -1296,6 +1358,7 @@ }, "0.5.9": { "bugs": [ + "DirtyBytesArrayToStorage", "NestedCallataArrayAbiReencodingSizeValidation", "ABIDecodeTwoDimensionalArrayMemory", "KeccakCaching", @@ -1314,6 +1377,7 @@ }, "0.6.0": { "bugs": [ + "DirtyBytesArrayToStorage", "NestedCallataArrayAbiReencodingSizeValidation", "ABIDecodeTwoDimensionalArrayMemory", "KeccakCaching", @@ -1330,6 +1394,7 @@ }, "0.6.1": { "bugs": [ + "DirtyBytesArrayToStorage", "NestedCallataArrayAbiReencodingSizeValidation", "ABIDecodeTwoDimensionalArrayMemory", "KeccakCaching", @@ -1345,6 +1410,7 @@ }, "0.6.10": { "bugs": [ + "DirtyBytesArrayToStorage", "DataLocationChangeInInternalOverride", "NestedCallataArrayAbiReencodingSizeValidation", "SignedImmutables", @@ -1357,6 +1423,7 @@ }, "0.6.11": { "bugs": [ + "DirtyBytesArrayToStorage", "DataLocationChangeInInternalOverride", "NestedCallataArrayAbiReencodingSizeValidation", "SignedImmutables", @@ -1369,6 +1436,7 @@ }, "0.6.12": { "bugs": [ + "DirtyBytesArrayToStorage", "DataLocationChangeInInternalOverride", "NestedCallataArrayAbiReencodingSizeValidation", "SignedImmutables", @@ -1381,6 +1449,7 @@ }, "0.6.2": { "bugs": [ + "DirtyBytesArrayToStorage", "NestedCallataArrayAbiReencodingSizeValidation", "ABIDecodeTwoDimensionalArrayMemory", "KeccakCaching", @@ -1396,6 +1465,7 @@ }, "0.6.3": { "bugs": [ + "DirtyBytesArrayToStorage", "NestedCallataArrayAbiReencodingSizeValidation", "ABIDecodeTwoDimensionalArrayMemory", "KeccakCaching", @@ -1411,6 +1481,7 @@ }, "0.6.4": { "bugs": [ + "DirtyBytesArrayToStorage", "NestedCallataArrayAbiReencodingSizeValidation", "ABIDecodeTwoDimensionalArrayMemory", "KeccakCaching", @@ -1426,6 +1497,7 @@ }, "0.6.5": { "bugs": [ + "DirtyBytesArrayToStorage", "NestedCallataArrayAbiReencodingSizeValidation", "SignedImmutables", "ABIDecodeTwoDimensionalArrayMemory", @@ -1441,6 +1513,7 @@ }, "0.6.6": { "bugs": [ + "DirtyBytesArrayToStorage", "NestedCallataArrayAbiReencodingSizeValidation", "SignedImmutables", "ABIDecodeTwoDimensionalArrayMemory", @@ -1455,6 +1528,7 @@ }, "0.6.7": { "bugs": [ + "DirtyBytesArrayToStorage", "NestedCallataArrayAbiReencodingSizeValidation", "SignedImmutables", "ABIDecodeTwoDimensionalArrayMemory", @@ -1469,6 +1543,7 @@ }, "0.6.8": { "bugs": [ + "DirtyBytesArrayToStorage", "NestedCallataArrayAbiReencodingSizeValidation", "SignedImmutables", "ABIDecodeTwoDimensionalArrayMemory", @@ -1480,6 +1555,7 @@ }, "0.6.9": { "bugs": [ + "DirtyBytesArrayToStorage", "DataLocationChangeInInternalOverride", "NestedCallataArrayAbiReencodingSizeValidation", "SignedImmutables", @@ -1493,6 +1569,7 @@ }, "0.7.0": { "bugs": [ + "DirtyBytesArrayToStorage", "DataLocationChangeInInternalOverride", "NestedCallataArrayAbiReencodingSizeValidation", "SignedImmutables", @@ -1505,6 +1582,7 @@ }, "0.7.1": { "bugs": [ + "DirtyBytesArrayToStorage", "DataLocationChangeInInternalOverride", "NestedCallataArrayAbiReencodingSizeValidation", "SignedImmutables", @@ -1518,6 +1596,7 @@ }, "0.7.2": { "bugs": [ + "DirtyBytesArrayToStorage", "DataLocationChangeInInternalOverride", "NestedCallataArrayAbiReencodingSizeValidation", "SignedImmutables", @@ -1530,6 +1609,7 @@ }, "0.7.3": { "bugs": [ + "DirtyBytesArrayToStorage", "DataLocationChangeInInternalOverride", "NestedCallataArrayAbiReencodingSizeValidation", "SignedImmutables", @@ -1541,6 +1621,7 @@ }, "0.7.4": { "bugs": [ + "DirtyBytesArrayToStorage", "DataLocationChangeInInternalOverride", "NestedCallataArrayAbiReencodingSizeValidation", "SignedImmutables", @@ -1551,6 +1632,7 @@ }, "0.7.5": { "bugs": [ + "DirtyBytesArrayToStorage", "DataLocationChangeInInternalOverride", "NestedCallataArrayAbiReencodingSizeValidation", "SignedImmutables", @@ -1561,6 +1643,7 @@ }, "0.7.6": { "bugs": [ + "DirtyBytesArrayToStorage", "DataLocationChangeInInternalOverride", "NestedCallataArrayAbiReencodingSizeValidation", "SignedImmutables", @@ -1571,6 +1654,7 @@ }, "0.8.0": { "bugs": [ + "DirtyBytesArrayToStorage", "DataLocationChangeInInternalOverride", "NestedCallataArrayAbiReencodingSizeValidation", "SignedImmutables", @@ -1581,6 +1665,7 @@ }, "0.8.1": { "bugs": [ + "DirtyBytesArrayToStorage", "DataLocationChangeInInternalOverride", "NestedCallataArrayAbiReencodingSizeValidation", "SignedImmutables", @@ -1591,6 +1676,7 @@ }, "0.8.10": { "bugs": [ + "DirtyBytesArrayToStorage", "DataLocationChangeInInternalOverride", "NestedCallataArrayAbiReencodingSizeValidation" ], @@ -1598,6 +1684,7 @@ }, "0.8.11": { "bugs": [ + "DirtyBytesArrayToStorage", "DataLocationChangeInInternalOverride", "NestedCallataArrayAbiReencodingSizeValidation", "AbiEncodeCallLiteralAsFixedBytesBug" @@ -1606,6 +1693,7 @@ }, "0.8.12": { "bugs": [ + "DirtyBytesArrayToStorage", "DataLocationChangeInInternalOverride", "NestedCallataArrayAbiReencodingSizeValidation", "AbiEncodeCallLiteralAsFixedBytesBug" @@ -1614,6 +1702,7 @@ }, "0.8.13": { "bugs": [ + "DirtyBytesArrayToStorage", "InlineAssemblyMemorySideEffects", "DataLocationChangeInInternalOverride", "NestedCallataArrayAbiReencodingSizeValidation" @@ -1622,12 +1711,14 @@ }, "0.8.14": { "bugs": [ + "DirtyBytesArrayToStorage", "InlineAssemblyMemorySideEffects" ], "released": "2022-05-17" }, "0.8.2": { "bugs": [ + "DirtyBytesArrayToStorage", "DataLocationChangeInInternalOverride", "NestedCallataArrayAbiReencodingSizeValidation", "SignedImmutables", @@ -1638,6 +1729,7 @@ }, "0.8.3": { "bugs": [ + "DirtyBytesArrayToStorage", "DataLocationChangeInInternalOverride", "NestedCallataArrayAbiReencodingSizeValidation", "SignedImmutables", @@ -1647,6 +1739,7 @@ }, "0.8.4": { "bugs": [ + "DirtyBytesArrayToStorage", "DataLocationChangeInInternalOverride", "NestedCallataArrayAbiReencodingSizeValidation", "SignedImmutables" @@ -1655,6 +1748,7 @@ }, "0.8.5": { "bugs": [ + "DirtyBytesArrayToStorage", "DataLocationChangeInInternalOverride", "NestedCallataArrayAbiReencodingSizeValidation", "SignedImmutables" @@ -1663,6 +1757,7 @@ }, "0.8.6": { "bugs": [ + "DirtyBytesArrayToStorage", "DataLocationChangeInInternalOverride", "NestedCallataArrayAbiReencodingSizeValidation", "SignedImmutables" @@ -1671,6 +1766,7 @@ }, "0.8.7": { "bugs": [ + "DirtyBytesArrayToStorage", "DataLocationChangeInInternalOverride", "NestedCallataArrayAbiReencodingSizeValidation", "SignedImmutables" @@ -1679,6 +1775,7 @@ }, "0.8.8": { "bugs": [ + "DirtyBytesArrayToStorage", "DataLocationChangeInInternalOverride", "NestedCallataArrayAbiReencodingSizeValidation", "UserDefinedValueTypesBug", @@ -1688,6 +1785,7 @@ }, "0.8.9": { "bugs": [ + "DirtyBytesArrayToStorage", "DataLocationChangeInInternalOverride", "NestedCallataArrayAbiReencodingSizeValidation" ],