aboutsummaryrefslogtreecommitdiffstats
path: root/packages/sol-cov/src/revert_trace_subprovider.ts
diff options
context:
space:
mode:
authorAlex Browne <stephenalexbrowne@gmail.com>2018-06-22 04:14:13 +0800
committerAlex Browne <stephenalexbrowne@gmail.com>2018-06-22 04:14:13 +0800
commit4cf331067bfa2a99ea39551f9fb2ad330b1c3fb7 (patch)
treeaa612dce78d93d4084091485254c350d556757e8 /packages/sol-cov/src/revert_trace_subprovider.ts
parent88500e37146dc9152050fdd810f9f3c3cc5faf9f (diff)
downloaddexon-0x-contracts-4cf331067bfa2a99ea39551f9fb2ad330b1c3fb7.tar
dexon-0x-contracts-4cf331067bfa2a99ea39551f9fb2ad330b1c3fb7.tar.gz
dexon-0x-contracts-4cf331067bfa2a99ea39551f9fb2ad330b1c3fb7.tar.bz2
dexon-0x-contracts-4cf331067bfa2a99ea39551f9fb2ad330b1c3fb7.tar.lz
dexon-0x-contracts-4cf331067bfa2a99ea39551f9fb2ad330b1c3fb7.tar.xz
dexon-0x-contracts-4cf331067bfa2a99ea39551f9fb2ad330b1c3fb7.tar.zst
dexon-0x-contracts-4cf331067bfa2a99ea39551f9fb2ad330b1c3fb7.zip
Fix some bugs in sol-cov
Diffstat (limited to 'packages/sol-cov/src/revert_trace_subprovider.ts')
-rw-r--r--packages/sol-cov/src/revert_trace_subprovider.ts18
1 files changed, 11 insertions, 7 deletions
diff --git a/packages/sol-cov/src/revert_trace_subprovider.ts b/packages/sol-cov/src/revert_trace_subprovider.ts
index fb2215eaa..fed305bd3 100644
--- a/packages/sol-cov/src/revert_trace_subprovider.ts
+++ b/packages/sol-cov/src/revert_trace_subprovider.ts
@@ -75,6 +75,7 @@ export class RevertTraceSubprovider extends TraceCollectionSubprovider {
}
const bytecodeHex = stripHexPrefix(bytecode);
const sourceMap = isContractCreation ? contractData.sourceMap : contractData.sourceMapRuntime;
+
const pcToSourceRange = parseSourceMap(
contractData.sourceCodes,
sourceMap,
@@ -88,16 +89,19 @@ export class RevertTraceSubprovider extends TraceCollectionSubprovider {
// actually happens in assembly). In that case, we want to keep
// searching backwards by decrementing the pc until we find a
// mapped source range.
- while (_.isUndefined(sourceRange)) {
+ while (_.isUndefined(sourceRange) && pc > 0) {
sourceRange = pcToSourceRange[pc];
pc -= 1;
- if (pc <= 0) {
- this._logger.warn(
- `could not find matching sourceRange for structLog: ${evmCallStackEntry.structLog}`,
- );
- continue;
- }
}
+ if (_.isUndefined(sourceRange)) {
+ this._logger.warn(
+ `could not find matching sourceRange for structLog: ${JSON.stringify(
+ _.omit(evmCallStackEntry.structLog, 'stack'),
+ )}`,
+ );
+ continue;
+ }
+
const fileIndex = contractData.sources.indexOf(sourceRange.fileName);
const sourceSnippet = getSourceRangeSnippet(sourceRange, contractData.sourceCodes[fileIndex]);
if (sourceSnippet !== null) {