Skip to content

Commit

Permalink
Merge pull request #556 from ethereum/handle-colons-in-file-names-on-…
Browse files Browse the repository at this point in the history
…0.4.10

Fix crash on 0.4.10 when the file name contains a colon
  • Loading branch information
cameel authored Oct 25, 2021
2 parents 8920105 + 7c78d4c commit 55e84db
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 1 deletion.
71 changes: 71 additions & 0 deletions test/compiler.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
const assert = require('assert');
const tape = require('tape');
const semver = require('semver');
const solc = require('../index.js');
Expand All @@ -9,6 +10,16 @@ var noRemoteVersions = (process.argv.indexOf('--no-remote-versions') >= 0);
function runTests (solc, versionText) {
console.log(`Running tests with ${versionText} ${solc.version()}`);

function resplitFileNameOnFirstColon (fileName, contractName) {
assert(!contractName.includes(':'));

let contractNameComponents = fileName.split(':');
const truncatedFileName = contractNameComponents.shift();
contractNameComponents.push(contractName);

return [truncatedFileName, contractNameComponents.join(':')];
}

function getBytecode (output, fileName, contractName) {
try {
var outputContract;
Expand All @@ -29,6 +40,9 @@ function runTests (solc, versionText) {
if (semver.lt(solc.semver(), '0.4.9')) {
outputFile = output.contracts[''];
} else {
if (semver.gt(solc.semver(), '0.4.10') && semver.lt(solc.semver(), '0.4.20')) {
[fileName, contractName] = resplitFileNameOnFirstColon(fileName, contractName);
}
outputFile = output.contracts[fileName];
}
return outputFile[contractName]['evm']['bytecode']['object'];
Expand All @@ -43,6 +57,9 @@ function runTests (solc, versionText) {
if (semver.lt(solc.semver(), '0.4.9')) {
outputFile = output.contracts[''];
} else {
if (semver.gt(solc.semver(), '0.4.10') && semver.gt(solc.semver(), '0.4.20')) {
[fileName, contractName] = resplitFileNameOnFirstColon(fileName, contractName);
}
outputFile = output.contracts[fileName];
}
return outputFile[contractName]['evm']['gasEstimates'];
Expand Down Expand Up @@ -757,6 +774,56 @@ function runTests (solc, versionText) {
}
st.end();
});

t.test('compiling standard JSON (file names containing symbols)', function (st) {
var input = {
'language': 'Solidity',
'settings': {
'outputSelection': {
'*': {
'*': ['evm.bytecode']
}
}
},
'sources': {
'!@#$%^&*()_+-=[]{}\\|"\';:~`<>,.?/': {
'content': 'contract C {}'
}
}
};

var output = JSON.parse(solc.compile(JSON.stringify(input)));
st.ok(expectNoError(output));
var C = getBytecodeStandard(output, '!@#$%^&*()_+-=[]{}\\|"\';:~`<>,.?/', 'C');
st.ok(typeof C === 'string');
st.ok(C.length > 0);
st.end();
});

t.test('compiling standard JSON (file names containing multiple semicolons)', function (st) {
var input = {
'language': 'Solidity',
'settings': {
'outputSelection': {
'*': {
'*': ['evm.bytecode']
}
}
},
'sources': {
'a:b:c:d:e:f:G.sol': {
'content': 'contract G {}'
}
}
};

var output = JSON.parse(solc.compile(JSON.stringify(input)));
st.ok(expectNoError(output));
var G = getBytecodeStandard(output, 'a:b:c:d:e:f:G.sol', 'G');
st.ok(typeof G === 'string');
st.ok(G.length > 0);
st.end();
});
});
});

Expand Down Expand Up @@ -810,8 +877,12 @@ if (!noRemoteVersions) {
'v0.2.1+commit.91a6b35',
'v0.3.6+commit.3fc68da',
'v0.4.0+commit.acd334c9',
'v0.4.9+commit.364da425',
'v0.4.10+commit.f0d539ae',
'v0.4.11+commit.68ef5810',
'v0.4.12+commit.194ff033',
'v0.4.19+commit.c4cbbb05',
'v0.4.20+commit.3155dd80',
'v0.4.26+commit.4563c3fc'
];
for (var version in versions) {
Expand Down
2 changes: 1 addition & 1 deletion translate.js
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ function translateJsonCompilerOutput (output, libraries) {
ret['contracts'] = {};
for (var contract in output['contracts']) {
// Split name first, can be `contract`, `:contract` or `filename:contract`
var tmp = contract.match(/^(([^:]*):)?([^:]+)$/);
var tmp = contract.match(/^((.*):)?([^:]+)$/);
if (tmp.length !== 4) {
// Force abort
return null;
Expand Down

0 comments on commit 55e84db

Please sign in to comment.