Create and update bugs by version list.

This commit is contained in:
chriseth 2017-04-12 15:20:07 +02:00
parent 291ece2bdb
commit a7e605a7a1
3 changed files with 344 additions and 1 deletions

297
docs/bugs_by_version.json Normal file
View File

@ -0,0 +1,297 @@
{
"0.1.0": {
"bugs": [
"IdentityPrecompileReturnIgnored",
"StaleKnowledegAboutSHA3",
"SendFailsForZeroEther",
"DynamicAllocationInfiniteLoop",
"ClearStateOnCodePathJoin",
"CleanBytesHigherOrderBits",
"ArrayAccessCleanHigherOrderBits",
"AncientCompiler"
],
"released": "2015-07-10"
},
"0.1.1": {
"bugs": [
"IdentityPrecompileReturnIgnored",
"StaleKnowledegAboutSHA3",
"SendFailsForZeroEther",
"DynamicAllocationInfiniteLoop",
"ClearStateOnCodePathJoin",
"CleanBytesHigherOrderBits",
"ArrayAccessCleanHigherOrderBits",
"AncientCompiler"
],
"released": "2015-08-04"
},
"0.1.2": {
"bugs": [
"IdentityPrecompileReturnIgnored",
"StaleKnowledegAboutSHA3",
"SendFailsForZeroEther",
"DynamicAllocationInfiniteLoop",
"ClearStateOnCodePathJoin",
"CleanBytesHigherOrderBits",
"ArrayAccessCleanHigherOrderBits",
"AncientCompiler"
],
"released": "2015-08-20"
},
"0.1.3": {
"bugs": [
"IdentityPrecompileReturnIgnored",
"StaleKnowledegAboutSHA3",
"SendFailsForZeroEther",
"DynamicAllocationInfiniteLoop",
"ClearStateOnCodePathJoin",
"CleanBytesHigherOrderBits",
"ArrayAccessCleanHigherOrderBits",
"AncientCompiler"
],
"released": "2015-09-25"
},
"0.1.4": {
"bugs": [
"IdentityPrecompileReturnIgnored",
"StaleKnowledegAboutSHA3",
"SendFailsForZeroEther",
"DynamicAllocationInfiniteLoop",
"ClearStateOnCodePathJoin",
"CleanBytesHigherOrderBits",
"ArrayAccessCleanHigherOrderBits",
"AncientCompiler"
],
"released": "2015-09-30"
},
"0.1.5": {
"bugs": [
"IdentityPrecompileReturnIgnored",
"StaleKnowledegAboutSHA3",
"SendFailsForZeroEther",
"DynamicAllocationInfiniteLoop",
"ClearStateOnCodePathJoin",
"CleanBytesHigherOrderBits",
"ArrayAccessCleanHigherOrderBits",
"AncientCompiler"
],
"released": "2015-10-07"
},
"0.1.6": {
"bugs": [
"IdentityPrecompileReturnIgnored",
"HighOrderByteCleanStorage",
"StaleKnowledegAboutSHA3",
"SendFailsForZeroEther",
"DynamicAllocationInfiniteLoop",
"ClearStateOnCodePathJoin",
"CleanBytesHigherOrderBits",
"ArrayAccessCleanHigherOrderBits",
"AncientCompiler"
],
"released": "2015-10-16"
},
"0.1.7": {
"bugs": [
"IdentityPrecompileReturnIgnored",
"HighOrderByteCleanStorage",
"StaleKnowledegAboutSHA3",
"SendFailsForZeroEther",
"DynamicAllocationInfiniteLoop",
"ClearStateOnCodePathJoin",
"CleanBytesHigherOrderBits",
"ArrayAccessCleanHigherOrderBits",
"AncientCompiler"
],
"released": "2015-11-17"
},
"0.2.0": {
"bugs": [
"IdentityPrecompileReturnIgnored",
"HighOrderByteCleanStorage",
"StaleKnowledegAboutSHA3",
"SendFailsForZeroEther",
"DynamicAllocationInfiniteLoop",
"ClearStateOnCodePathJoin",
"CleanBytesHigherOrderBits",
"ArrayAccessCleanHigherOrderBits",
"AncientCompiler"
],
"released": "2015-12-02"
},
"0.2.1": {
"bugs": [
"IdentityPrecompileReturnIgnored",
"HighOrderByteCleanStorage",
"StaleKnowledegAboutSHA3",
"SendFailsForZeroEther",
"DynamicAllocationInfiniteLoop",
"ClearStateOnCodePathJoin",
"CleanBytesHigherOrderBits",
"ArrayAccessCleanHigherOrderBits",
"AncientCompiler"
],
"released": "2016-01-30"
},
"0.2.2": {
"bugs": [
"IdentityPrecompileReturnIgnored",
"HighOrderByteCleanStorage",
"StaleKnowledegAboutSHA3",
"SendFailsForZeroEther",
"DynamicAllocationInfiniteLoop",
"ClearStateOnCodePathJoin",
"CleanBytesHigherOrderBits",
"ArrayAccessCleanHigherOrderBits",
"AncientCompiler"
],
"released": "2016-02-17"
},
"0.3.0": {
"bugs": [
"IdentityPrecompileReturnIgnored",
"HighOrderByteCleanStorage",
"StaleKnowledegAboutSHA3",
"SendFailsForZeroEther",
"DynamicAllocationInfiniteLoop",
"ClearStateOnCodePathJoin",
"CleanBytesHigherOrderBits",
"ArrayAccessCleanHigherOrderBits"
],
"released": "2016-03-11"
},
"0.3.1": {
"bugs": [
"IdentityPrecompileReturnIgnored",
"HighOrderByteCleanStorage",
"StaleKnowledegAboutSHA3",
"SendFailsForZeroEther",
"DynamicAllocationInfiniteLoop",
"ClearStateOnCodePathJoin",
"CleanBytesHigherOrderBits"
],
"released": "2016-03-31"
},
"0.3.2": {
"bugs": [
"IdentityPrecompileReturnIgnored",
"HighOrderByteCleanStorage",
"StaleKnowledegAboutSHA3",
"SendFailsForZeroEther",
"DynamicAllocationInfiniteLoop",
"ClearStateOnCodePathJoin",
"CleanBytesHigherOrderBits"
],
"released": "2016-04-18"
},
"0.3.3": {
"bugs": [
"IdentityPrecompileReturnIgnored",
"HighOrderByteCleanStorage",
"StaleKnowledegAboutSHA3",
"SendFailsForZeroEther",
"DynamicAllocationInfiniteLoop",
"ClearStateOnCodePathJoin"
],
"released": "2016-05-27"
},
"0.3.4": {
"bugs": [
"IdentityPrecompileReturnIgnored",
"HighOrderByteCleanStorage",
"StaleKnowledegAboutSHA3",
"SendFailsForZeroEther",
"DynamicAllocationInfiniteLoop",
"ClearStateOnCodePathJoin"
],
"released": "2016-05-31"
},
"0.3.5": {
"bugs": [
"IdentityPrecompileReturnIgnored",
"HighOrderByteCleanStorage",
"StaleKnowledegAboutSHA3",
"SendFailsForZeroEther",
"DynamicAllocationInfiniteLoop",
"ClearStateOnCodePathJoin"
],
"released": "2016-06-10"
},
"0.3.6": {
"bugs": [
"IdentityPrecompileReturnIgnored",
"HighOrderByteCleanStorage",
"StaleKnowledegAboutSHA3",
"SendFailsForZeroEther"
],
"released": "2016-08-10"
},
"0.4.0": {
"bugs": [
"IdentityPrecompileReturnIgnored",
"HighOrderByteCleanStorage",
"StaleKnowledegAboutSHA3",
"LibrariesNotCallableFromPayableFunctions"
],
"released": "2016-09-08"
},
"0.4.1": {
"bugs": [
"IdentityPrecompileReturnIgnored",
"HighOrderByteCleanStorage",
"StaleKnowledegAboutSHA3",
"LibrariesNotCallableFromPayableFunctions"
],
"released": "2016-09-09"
},
"0.4.10": {
"bugs": [],
"released": "2017-03-15"
},
"0.4.2": {
"bugs": [
"IdentityPrecompileReturnIgnored",
"HighOrderByteCleanStorage",
"StaleKnowledegAboutSHA3"
],
"released": "2016-09-17"
},
"0.4.3": {
"bugs": [
"IdentityPrecompileReturnIgnored",
"HighOrderByteCleanStorage"
],
"released": "2016-10-25"
},
"0.4.4": {
"bugs": [
"IdentityPrecompileReturnIgnored"
],
"released": "2016-10-31"
},
"0.4.5": {
"bugs": [
"IdentityPrecompileReturnIgnored",
"StateKnowledgeNotResetForJumpdest"
],
"released": "2016-11-21"
},
"0.4.6": {
"bugs": [
"IdentityPrecompileReturnIgnored"
],
"released": "2016-11-22"
},
"0.4.7": {
"bugs": [],
"released": "2016-12-15"
},
"0.4.8": {
"bugs": [],
"released": "2017-01-13"
},
"0.4.9": {
"bugs": [],
"released": "2017-01-31"
}
}

View File

@ -0,0 +1,43 @@
#!/usr/bin/env python
#
# This script is used to generate the list of bugs per compiler version
# from the list of bugs.
# It updates the list in place and signals failure if there were changes.
# This makes it possible to use this script as part of CI to check
# that the list is up to date.
import os
import json
import re
import sys
def comp(version_string):
return [int(c) for c in version_string.split('.')]
path = os.path.dirname(os.path.realpath(__file__))
with open(path + '/../docs/bugs.json') as bugsFile:
bugs = json.load(bugsFile)
versions = {}
with open(path + '/../Changelog.md') as changelog:
for line in changelog:
m = re.search(r'^### (\S+) \((\d+-\d+-\d+)\)$', line)
if m:
versions[m.group(1)] = {}
versions[m.group(1)]['released'] = m.group(2)
for v in versions:
versions[v]['bugs'] = []
for bug in bugs:
if 'introduced' in bug and comp(bug['introduced']) > comp(v):
continue
if comp(bug['fixed']) <= comp(v):
continue
versions[v]['bugs'] += [bug['name']]
with open(path + '/../docs/bugs_by_version.json', 'r+') as bugs_by_version:
old_contents = bugs_by_version.read()
new_contents = json.dumps(versions, sort_keys=True, indent=4)
bugs_by_version.seek(0)
bugs_by_version.write(new_contents)
sys.exit(old_contents != new_contents)

View File

@ -31,7 +31,10 @@ set -e
REPO_ROOT="$(dirname "$0")"/..
SOLC="$REPO_ROOT/build/solc/solc"
# Compile all files in std and examples.
echo "Checking that the bug list is up to date..."
"$REPO_ROOT"/scripts/update_bugs_by_version.py
echo "Compiling all files in std and examples..."
for f in "$REPO_ROOT"/std/*.sol
do