Commit Graph
78 Commits
Author SHA1 Message Date
Eric Kilmer 522f8ba31e Add methods for getting list of (un)implemented system calls (#2491)
This is primarily a helper function that is useful in evaluating the
capabilities of Manticore on Linux

* Add Linux Kernel version constant to syscalls list

* Add method for getting unimplemented syscalls

This is specific per architecture
2021-09-15 09:13:48 -04:00
Eric Hennenfent b73986b141 Unpin Truffle Version, Use Latest crytic-compile (#2490)
This PR allows us to support Truffle version 5.3.14, which is now supported by the [latest release of crytic-compile](https://github.com/crytic/crytic-compile/releases/tag/0.2.1)
2021-09-13 10:16:26 -04:00
Eric Kilmer 378f8e80d8 Install pinned version of truffle to fix CI (#2467) 2021-07-13 11:19:48 -07:00
Gustavo GriecoandEric Hennenfent 5e4d358408 Portfolio of parallel solvers (#2420)
* First attempt to have parallel solvers

* busy waiting

* fix

* fixes

* linted

* fixed mypy types

* fixed tests

* fixes

* linted

* fixed mypy types

* adjusted the number of workers

* randomize solvers

* simplified code

* fix

* fixes

* use portfolio by default

* use the portfolio solver by default in the detectors (and reverted last commit)

* rewrote the recv function

* fixes

* fixes

* use the portfolio solver by default in the general evm tests

* fix

* more fixes

* fixes

* fix

* fix

* fix

* fix

* fixes

* fix

* code refactoring

* mypy fix

* linted code

Co-authored-by: Eric Hennenfent <[email protected]>
2021-06-10 12:09:33 -07:00
Eric Hennenfent 2380d5ebc4 Replace Quick mode with Thorough mode (#2457)
* Replace Quick mode with Thorough mode

Replaces the `quick_mode` flag with `thorough_mode` and inverts the logic. Closes #2424.

* Run truffle tests in thorough mode

* Use thorough mode for failing test
2021-06-09 13:23:51 -07:00
Eric Kilmer 5205fa3e02 Fix incorrect comparison for symbolic file wildcards (#2454)
* Add tests for symbolic file wildcard handling

* Add example script and assertions for fileio.c in `examples` directory
2021-06-02 09:30:22 -04:00
Gustavo GriecoandEric Kilmer b4d129f8b1 Fix the generation of EVM tests (#2426)
* Update run_tests.sh

* Add note for why commit was pinned

Co-authored-by: Eric Kilmer <[email protected]>
2021-04-07 14:30:25 -04:00
Eric HennenfentandEric Kilmer f46f78b69b State Introspection API (#1775)
* Create state transition events

Should make it possible to track movements between state lists

* Plug new events into context

This will break the state merging plugin (but I'll fix it eventually)

* move most enums to their own module

* Blacken

* Add DaemonThread from TUI branch

* Add interface for registering daemon threads

* Timestamp StateDescriptor upon updates

* Capture return value

* Blacken

* Add solver wrapper to StateBase

* Add `solve` events to all instances of SelectedSolver.instance()

* Remove executor constraints from WASM

* Add solve events to memory.py

* Add intermittent execution event

* Be more generous with states whose initialization we missed

* Add Native callback for updating state descriptor

* Fix state killing

* Blacken

* codecov: Remove outdated 'yml' entry in CI

From these commits
https://github.com/codecov/codecov-action/commit/ebea5cacdf7d0b843f66bcb1ae27d8f27b758e81
https://github.com/codecov/codecov-action/commit/49c86d6a5fd072b05c31a42baa67b8fb2e87c8f7

* Add solve event to evm

Make warning messages better

Debug GH actions

Revert "Debug GH actions"

This reverts commit f575eea3c3a09dbf2cd2b8e81940fc4297fdf039.

Fix some pycharm-detected problems

Make symbolic function error message more verbose

Add solve to published events

Loud errors in callbacks by default

Trying to find out what's killing truffle

Revert "Trying to find out what's killing truffle"

This reverts commit 8bd02245ccc2ce54c9161072eba231880c084874.

Revert "Make symbolic function error message more verbose"

This reverts commit bd3e90cdb0dfabf0ac874badad723be50998f63b.

Debugging Truffle

Restore introspector

Add try_except on every callback

Unconditionally print error message

Add traceback

Update event.py

Debug subscriptions

Debug arguments to callbacks

Different debug msg

1ast arg

Print statement debugging...

Pass in `None` as state

Revert "Add try_except on every callback"

This reverts commit 1c689dd43c619ba322cda5e7283686308c8db4e0.

* Drop solve events outside of a state context

Forgot did_solve

Remove traceback

* Fix must/cannot_be_null usage

* Fix missing solve event

* Partially restore old did_fork_state ABI

* Called internally

* Clone iterators instead of creating a list

* Use isgenerator instead of checking if iterable

* Fix snapshot restoration

* Slightly improve Unicorn test API usage

* Temporarily disable property verifier tests

* improper skip arg

* Add simple tests for introspection API

* Add test for custom introspector, improve base introspection test

* Add intermittent update timestamp

* Only allow daemon registration and introspection registration at initialization

* Add docs to manticore.py

* Add docs for plugin, add update_state_descriptor to EVM

* Fix renamed will_start_run --> will_run

* Docstrings for DaemonThread and EventSolver

* Docs for enums

* Improve pretty printer, add some mypy fixes

* Don't run daemon threads if run is called multiple times

* If at first you don't succeed, destroy all the evidence you tried.

* Test the pretty printer

* Add StateDescriptor to RTD

* Add newlines for RTD parsing

* Make info logs debug logs

* Apply suggestions from code review

Newlines for doc comments

Co-authored-by: Eric Kilmer <[email protected]>

* Add some type hints to manticore.py

* Add some type hints to plugin.py

* Fix type hint for get_state

* Add termination message from TUI PR

* Add example script

* Add docstrings to the example script

* Pass introspection plugin type as an argument

* Unskip property verifier tests

* Add mypy-requests type hints

* Remove itertools.tee

The problem with usign tee is that only the first callback to use the iterator can write to it. In `ready_states`, the `save_state` after the `yield` statement is ignored for all others.

* Make generator cloning a little bit more robust

Now Manticore will give up and return the original argument instead of blowing up if it can't clone the generator

* Clean up invalidated unit tests

We now fire `introspect` for the first time before we have any states

* Debug missing Truffle & Examples coverage

* Merge coverage from XML file

* Switch coverage to JSON, ignore debug logging and NotImplemented code

* Fix copy commands

* Move .coverage files directly

* Set examples to append coverage

* FLAG_NAME doesn't work the way we'd like

* Use plugin dict to store introspector

* Appease mypy

* Fix missing property on unique name

* Grab EVM PC

* Blacken

* Run black on all files if the git diff command fails

Co-authored-by: Eric Kilmer <[email protected]>
2020-09-09 08:32:46 -07:00
Eric Hennenfent 2159aa76dc Capture return values in run.sh (#1776)
* Capture return value

* Increase verifier test timeout

* Fix typo

* Add more frequent checks to m.is_killed
2020-08-04 09:17:56 -07:00
f39e6ba768 Manticore verifier (#1717)
* Add ONE failing test

* Fix test

* Try fix get-related

* Snapshots

* CC

* Allow snapshooting just from main()

* A test

* Test and fix is_main

* CC

* review

* ismain vs is_running

* is main to is main script

* Remove unused member variable

* initial import manticore verifier

* Fix verifier installation

* clear ready states

* CC and smoke test

* CC

* Increase cov

* Move regression to other

* blkn

* blkn

* Move get related

* CC

* fix concolic

* lint

* DivByZero default to zero

* blkn

* Update manticore/core/smtlib/solver.py

Co-authored-by: Eric Kilmer <[email protected]>

* Update manticore/core/smtlib/constraints.py

Co-authored-by: Eric Kilmer <[email protected]>

* Update manticore/core/smtlib/constraints.py

Co-authored-by: Eric Kilmer <[email protected]>

* remove odd string

* lint

* mypy lint

* Update manticore/core/smtlib/visitors.py

Co-authored-by: Eric Kilmer <[email protected]>

* lint

* Add Docs

* blkn

* blkn

* Replace modulo with masks

* Blacken

* blkn

* fix mypy

* fix mypy

* Add tests for signed LT behavior

* New test

* Fix constant folding

* lint

* blkn

* lint

* Fixes...

* lint

* Unittesting power

* Permisive read_buffer

* Fix optimize

* Preserve precision in constant folding

* Strip left-in print debugging

* blkn

* remove wasm_sym temporarily

* Better simplification for constants

* Add json

* blkn

* Better commmandline args

* blkn

* fix wasm

* Fix

* better commanlining

* REmove get_related from the default path and fix arm test

* blkn

* fix related to tests

* blkn

* Fix bug in test and disable debug messages in Solver

* smtlib config to disable multiple check-sat in newer z3

* Disable log test and fix merging poc vs variable migration

* blkn

* Avoid exception in some callbacks

* can_rais at did_will

* yikes!

* blkn

* Yices found one more states in truffle

* Add a config constant to ignore symbolic balances

* Add a config constant to ignore symbolic balances 2

* Relax truffle state count

* Relax truffle state count 2

* Change cli name and test

* Clear redy states in verifier workspace

* Clear ready states in verifier workspace

* Relative ws path on verifier output. Clean CREATE testcase example

* Blkn

* Improve coverage and funcid solving

* lint

* Better testcase generation at verifier

* Better testcase generation at verifier and typos

* Better output and default re

* Test must revert

* Better output and default re

* move generate_testcase_ex to private method

Co-authored-by: Eric Kilmer <[email protected]>
Co-authored-by: Eric Hennenfent <[email protected]>
2020-06-26 18:12:34 -03:00
Eric Hennenfent 61909a157b Nightly MacOS Tests (#1614)
* Experiment with testing on OSX

Not committing to front-lining OSX support as a feature because there are some fundamental performance concerns, but I would like to see how the tests behave.

* solc --> usr/local/bin

* Don't fail fast

* Require Unicorn 1.0.2rc2

¯\_(ツ)_/¯

* Update Bash on OSX builds

* Use mac solc

* Simpler solidity installation

* Fix wasm tests maybe?

* Swap `ls` args in truffle tests

* Good 'ol printf debugging

* OSX Keystone install

* Truffle test miscounting fix?

* Add unzipping timeout

* Remive timeout _and_ `yes`

* Allow output check to work on OSX

* Add list wrapper to filter

* Remove print statements

* yolo keystone via homebrew

* Try again w/ Keystone Brew

* typo

* Create osx.yml

* Revert to Master's ci.yml

* Update to checkout@v2 universally

* Save checkout version change for another PR

It maybe breaks codecov?

* Add Truffle Tests

* Fix Truffle

* Make native an option

* See if native works?

* Revert "See if native works?"

This reverts commit ce90d8bcb0.

* Replace actions content w/ script

* Update number of Truffle tests

* Force working directory

* Remove shebang, fix YAML

* Fix incorrect path to script?

* Why are the docs always wrong

* YAML syntax

* Fix usage of GITHUB_WORKSPACE

* Forget the workspace, just copy the script to the root

* Revert workspace path changes

* Fix VM test generation

* Whitespace fixes

* Only run on a schedule

* Install Yices and CVC4
2020-06-23 12:09:16 -07:00
Eric Hennenfent 6747143eca Fix Black (#1718)
* Use merge SHA instead of head

Github Actions doesn't update the head variable despite the checkout action merging the active branch into `master`, so the commit range specified was invalid

* Start from common ancestor

* Omit explicit SHA

* Lint HEAD instead of merge

* Manually fetch base SHA

* Print the names of files to be diffed

* Update ci.yml

* Modify a Python file

* Blacken everything that was missing

The modified files got missed due to black not properly running on our CI
2020-05-28 12:54:31 -07:00
Eric HennenfentandBrad Larsen 8565705f79 Fix LGTM Errors (#1656)
* py/missing-call-to-init

* Remove deprecated should_profile argument

* WASM __init__ call and variable names

* Mute warnings about printing evm account IDs

LGTM thinks we're logging potentially sensitive data when we create a symbolic account and print the user ID. I can't imagine a context where we would ever care about this alert in general, so I'm going to disable it.

* Fix mixed attribute/function names

* Another missing __init__ call

* Remove single-op form of _bitwise_instruction

It's never used

* Use built-in ops instead of lambda

* Missing import

* Some unreachable code

Still missing some in evm.py

* Blacken

* Tag examples as examples

* NotImplemented -> NotImplementedError

* Fix unnecessary `pass`

* Revert "Remove single-op form of _bitwise_instruction"

This reverts commit 1b7a4110f4.

* Mute overzealous call argument error

Co-authored-by: Brad Larsen <[email protected]>
2020-04-08 13:49:28 -07:00
Paul Kehrer fae081d6d6 removes travis entirely (#1572) 2019-12-17 08:11:07 -08:00
Paul Kehrer 6b77189d6e switch to github actions (take two) (#1568)
* switch to github actions

* badges, better lint dep setup

* remove meaningless comment
2019-12-04 11:30:54 -06:00
Paul Kehrer ea112eed9c pytest-xdist prevents disturbing stdout, revert to travis_wait (#1566)
* pytest-xdist prevents disturbing stdout, revert to travis_wait

This prevents us from seeing realtime output but in exchange I've made
pytest fast-fail so jobs won't run past the first failing test. Not
ideal but we'll keep improving

* don't exit after first failure
2019-11-26 09:25:00 -08:00
Paul Kehrer 47d6fc59d6 various changes to resolve test timeout/invalid dep issues (#1563) 2019-11-24 20:37:40 +08:00
Paul Kehrer fc8ec61a84 try pytest xdist (#1561)
* try pytest xdist

* remove cached copies of pytest and pytest-xdist...
2019-11-22 11:24:39 -08:00
Paul Kehrer 336a43cde8 switch to pytest (#1560)
* switch to pytest

* okay wasm tests have very little output, use travis-pls
2019-11-22 23:27:35 +08:00
Eric Hennenfent 1208759e55 WASM Support MVP (#1495)
The WASM branch is ready to be included in the rest of Manticore. It doesn't include several advanced features, including a symbolic memory model, symbolic floating point support, or a standard library implementation (WASI/emscripten), but it does have full symbolic semantics for all of the integer instructions. 

### Commit log:
* Empty WASM Module

Will run on a .wasm file and do nothing forever

* Read and parse sections

/shrug

* Can partially allocate modules

Just pushing for the weekend

* Blacken

* Can allocate with exports now

* Static initialization

Doesn't evaluate any of the starting expressions, but that's okay

* Make type hints a little more pycharm-friendly

* First part of invocation

* Blacken...

* Barebones execution poc

Can execute the following snippet:
```
main(){
return 42;
}
```

* blacken

* Add some loads and stores

* Add global operations

* Move float methods further down

* Support internal function calls

```
18:20:42 (mc) ehennenfent@nessie:~/wasm ➜ cat loop_check.c
#include <stdio.h>
#include <stdbool.h>

bool check(int arg){
  if (((arg << 2) ^ 16) == 36) {
    return true;
  }
  else{
    return false;
  }
}

int main(){
    printf("Hello world!\n");

    int g = getchar();

    printf("Got: %d\n", g);

    int y = 0;
    for (int i = 0; i < 20; i++){
      y++;

      if (y > 18){
        return check(g) ? 0 : -1;
      }
    }

    return -1;
}
18:20:54 (mc) ehennenfent@nessie:~/wasm ➜ manticore loop_check.wasm
65: i32.const (16)
11: end
65: i32.const (32)
11: end
Initialization Complete
65: i32.const (0)
65: i32.const (0)
40: i32.load (Offset 4)
65: i32.const (16)
107: i32.sub
34: tee_local (Local 1)
54: i32.store (Offset 4)
65: i32.const (32)
16: call (Func Idx 2)
Called stub function with args: (32,)
HostFunc returned [13]
26: drop
32: get_local (Local 1)
16: call (Func Idx 0)
Called stub function with args: ()
HostFunc returned [13]
34: tee_local (Local 0)
54: i32.store (Offset 0)
65: i32.const (16)
32: get_local (Local 1)
16: call (Func Idx 1)
Called stub function with args: (16, 16)
HostFunc returned [13]
26: drop
65: i32.const (0)
32: get_local (Local 1)
65: i32.const (16)
106: i32.add
54: i32.store (Offset 4)
65: i32.const (-1)
65: i32.const (0)
32: get_local (Local 0)
65: i32.const (1073741823)
113: i32.and
65: i32.const (13)
71: i32.ne
27: select
11: end
[0]
2019-07-25 18:20:58,138: [13842] m.c.manticore:INFO: Generated testcase No. 0 - test
2019-07-25 18:20:58,143: [13842] m.c.manticore:INFO: Results in /home/ehennenfent/wasm/mcore_1evptpip
```

* Improve pickle-friendliness

* Convert wasm module instructions into internal type s

* Fix class naming conflict

Thanks Pickle

* Support bitvecs as an integer type

* Refactor execution to handle single instructions at a time

* Add Atomic Stacks

It's a very inefficient implementation, but we'll make it better

* Handle Concretize Exceptions

Needs a lot of fine tuning but it's a start

* Propagate symbols all the way to return

* Add test generation infrastructure

Still very basic but it's a start

* Attempt to make Travis happy

* Fix missing generation step

* Ignore stack exhaustsion and invalid modules

* Add basic shift instructions

* Add lots of arithmetic instructions

* Fix global initialization

* Add optimization for fixed size left shift

* Make Travis tests less verbose

* Blacken

* Properly handle modulo in shifting

* Add several control flow instructions

* Blacken

* Partially Fix return instruction

* Fix missing return value from look_forward

* Update look_forward to handle nested blocks

* Fix type sigs and executor copy/paste errors, deduplicate test names

* Fix an instruction exit issue

* Fix local ordering

* Blacken

* test_address now passes for wasm
Fixed issue with json2mc.py issue with testname uniqueness
Started some work on floating point

* i hate git

* i hate git

* Adding linenumber to testcase function name
minor float progress

* f32_cmp passed for wasm

* f64_cmp passes for wasm

* f32_bitwise passes except for the problem with assertEqual not working with nan

* f64_bitwise passes except for the problem with assertEqual not working with nan

* Fixed the tests to handle [nan] comparisons

* better handling of nans and infinites

* added integer backing value for f64

* Blacken

* Blacken

* f64.nearest

* Fix argument ordering and implement N-bit memory stores

* Use subtests

* Switch print to logger

* Modify control flow instructions to match spec

"Continuation" != the thing that goes inside the Label

* Teporarily disable call instructions to prevent infinite loop

Still need to figure out control flow for nested function calls

* Blacken

* Fixed infinite loop in _call via block depth tracking

The behavior of `end` needs to depend on how many labels and activations are on the stack. Every time we push or pop a label, we increment or decrement the counter for the current call frame.

* Blacken

* Initial `br` implementation

Probably still bugged

* Support if blocks without an else instruction

* Add call_indirect

* Add grow_memory

* i32_wrap_i64

* Add several arithmetic operators

* Copy i32.ctz impl from x86 TZCNT

* Fix off-by-one in br

I think this is the correct fix (it makes all the _br tests pass) but I'm leaving the TODO there just in case.

* Blacken...

* Fix lingering issue with if block splitting

* Fix bad args to sextend in i64_extend_s_i32

* Fix indirect call null check and Float binop return types

* Improve br_table indexing

See comment

* Remove vestigial argument popping in invoke

* Fix looking forward in _return and _block

* Blacken

* Generate trap and action tests

* Fix extraneous call to exec_for_test

* Fix missing traps in load instructions

* Fix c1=0 case in ctz/clz

Hopefully this also fixes the fact that the original CTZ implementations seems to have been intended for little-endian architectures

* Handle traps in-stride during test execution

* Treat zero division as trap

* Use ctypes to convert integers

* Blacken

* Apparently I was wrong about the CTZ endianness thing

* Better range checks for offsets

This really hammers home why checking whether ea + size is _greater than_ len(mem.data) is strange if mem.data is 0-indexed, but idk, that's what the spec says.

* Make stub functions return the correct number of results

* ctypes can't handle floats

* Add option to run the start function

* Correctly handle functions with unacceptable names

* Blacken

* Treat NotImplemented as a Skip

Also counts individual subtests directly instead of screwing around with trying to grep for them in the log.

* Fix unhandled negative indices

* Fixed some integer instruction bugs

i64/32:
div_s/u
shr_s/u
shl
clz

* Fix global and memory imports

* CC

* Make default loglevel debug

* Rework conversion from int

* Make float_store work

* _actually_ fix float_store

* Restore old float creation method

* Blacken

* Add range checks to float load/store

* Force cast to unsigned in _u instructions

* Fix yet another I32 -> I64 copy paste error

How many times do we have to teach you this lesson, ~old~ young man?

* Skip problematic float tests for now

* Handle floating point inaccuracies when dividing large ints

* Skip conversion and endianness tests

* Rotl, rotl, popcnt

* Blacken

* Add some conversion stubs

* Maybe fix conversions

* Improve reinterpret and float demotion

* Re-enable endianness tests

* Include WASM logging in verbosity controls

* Propagate constraints to executor

* Blacken

* Add prototype symbolic tests

* Add api for invocation to Manticore object

* Temporarily disable native/evm tests

There's no reason to tie up Travis for 40 minutes every time I push a commit.

* Fix wasmworld import

* Concretize br_if

* Pass arg generator to invoke

* Download updated WABT

It's fixed now!

* Generate Symbolic tests (partial)

* Follow m.run format

* Blacken

* Reinitialize Manticore every 50 tests

This should cut down on the performance issues we've been seeing

* Revert "Temporarily disable native/evm tests"

This reverts commit 7abd6c1333.

* I32 and I64 pass Symbolic

* Create new MC on reinit

* Blacken

* Fix return handling in test generation

* Concretize operand in `if_`

* Concretize memory addresses before access

In the long run, we should have a symbolic memory model

* Better memory access concretization (and br_table)

* Concretize float converions and indirect call operands

* Run start method

* Handle size errors in wrap+i64 and select

* Add timeout (and skip extra-problematic tests)

* Blacken

* Aggressively concretize floats

* Recast ints that should have been floats

* Better trap handling

* Unstash float concretization

* Fix log-lived 'trap' attr

* Blacken

* Concretize F32 when promoting to F64

_shouldn't_ strictly be necesssary, but the lazy conversion means that one of the tests fails. Until we get symbolic floating point, this will have to do.

* Docstrings for platforms/wasm.py

* Docstrings for ManticoreWASM

* Add docs for the module structure

* Add WASM to RTD

* missing docstring for Module itself

* Fix sphinx errors

* Bump RTD python version

I'm sorry and I swear I'll fix it later

* Reformat docstrings for sphinx

* Pacify RTD by adding newlines before params

* Missed a few

* Document the types

* Document executor

* A few more type docstrings

* Partial runtime_structure docs

* Finish documenting runtime structure

* Fix trailing whitespace

* Add collatz conjecture example

* Include undocumented members in RTD

* Add a bunch of events

* Appropriately connect event publishers

* Generate useful testcases

* Blacken

* Attempt at 3.6 backporting

* Optimize AtomicStack

* Sort solve_n output in test_solve_n

Very unclear why this is happening, but it's breaking a travis build
https://travis-ci.com/trailofbits/manticore/jobs/246451527

* Roll back to trusty?

Unsure if this is what's causing the EVM issues

* Create custom trap types

* Lazily evaluate overflows

May need to revert this if it slows down the Travis tests. It's 0.7% slower in the example I'm looking at, but that may not carry over.

* Blacken

* Address Dominik's feedback, remove stale TODOs

* Expand & Test Examples

* Fix relative path

* Fix relative path?

* capitalize Path

* Fix relative path for real

* Blacken...

* Test finalize

* Add supplemental tests for coverage

* Use dedicated helper for store access

* Handle quoted strings in imported module names

* Allow WASMWorld to hold multiple modules

Necessary for getting imports/exports to work, but still needs some changes before it passes the tests.

* Actually use export maps

* Fix most of the control flow issues with import tests

* Use available cores for test generation

* Escape module name

* Don't reinit modules that have already been initialized

* Use addresses for imports instead of copying

* Fix removed timeout argument

* Interleave registration and aliases

* Fix broken "None" check for address

* Blacken

* Make manual exports work with address syntax

* Import all registered modules

Only necessary for elem, but it's tricky to make changes just for one test, so *shrug emoji*

* Remove stringified annotations

Turns out those only work in the same file...

* Fix easy type issues in all but runtime structure

* Fix easy type issues in runtime_structure

* Fix* everything but imports

* Blacken

* Blacken 2

* Typo

* Merge module structure and runtime structure

* Fix instance vs type confusion

* Fix mypy and concrete tests

Still an issue with the symbolic tests

* Still generate symbolic tests though

I keep forgetting not to commit that file...

* Attempt to fix env for symbolic tests

* Blacken/mypy

* Fix missing supplemental environment variables arg

* Fix docstrings for new import style

* CC

* Bump timeout duration to 70 minutes

I don't like it, but adding more jobs to Travis isn't going to make our builds any faster

* Fix pycharm type, import, and docstring errors

* Explain type: ignore

* Missed two type:ignore's

* Fix CLI so it doesn't throw up on arbitrary modules
2019-11-08 07:58:24 -08:00
Eric Kilmer 0608f77afe Mypy support (#1544)
* linux: Add return 0 for success on sys_pipe2

* mypy: Initial config file to ignore modules without typing info

* mypy: types manticore/platforms/linux.py

* mypy: manticore/ethereum/manticore.py

* Ignore error because mypy doesn't support decorated @property's

* mypy: manticore/ethereum/solidity.py

* Ignore error because mypy doesn't support decorated @property's

* mypy: manticore/ethereum/detectors.py

* Use Python's Enum class for DetectorClassification

* mypy: manticore/platforms/cgcrandom.py

* Set as byte string

* mypy: manticore/binary/binary.py

* mypy: manticore/utils/event.py

* mypy: manticore/ethereum/abitypes

* Use actual ResourceWarning class instead of string name

* mypy: manticore/utils/config.py

* mypy: manticore/core/workspace.py

* Support both Python 3.6 and Python 3.7 with nullcontext. Ignore the
mypy error because it checks against Python 3.6 and Manticore does not
explicitly claim support for Python 3.7

* mypy: manticore/core/manticore

* Ignore mypy error on sync, at_running, at_not_running:

  Self argument missing for a non-static method (or an invalid type for
  self)

* Ignore type info for unsupported decorators on @property fields

* mypy: manticore/platforms/evm.py

* Ignore error of already defined variable when setting member variable
of class transaction

* Remove redundant get_nonce call

* Move property setter next to property definition

* mypy: manticore/core/smtlib/solver.py

* Fix instance where no match was found in regex

* mypy: Add mypy to travis and setup.py

* Lock to specific mypy and black tool versions

* Rename "format" stage to "lint"

* Add text about mypy to CONTRIBUTING.md

* Revert black tool upgrade to 19.3b0

* Fix typing issues introduced by SHA3 branch
2019-10-31 14:55:05 -07:00
feliam 7142116fe1 Unsound symbolication - A general approach to handle symbolic imprecisions (#1526)
* Unsound symbolication and asorted fixes

* Add test for ULE

* More operators tests

* remove TT

* remove TT

* remove TT

* Add test for simple sha3 concretization

* Add test for simple sha3 concretization

* Add coverage to integration tests

* Add coverage to integration tests

* Added timeout to sha3 matching

* 2 files reformatted

* Review fixes

* black

* Fix KeepOnlyIfStorageChanges test

* remove dead code

* cleanups

* remove unused code

* Blacken

* Better concretize and calldataload

* black

* blkn

* mulmod fix

* Blacken

* fix calldata rel tests

* blk

* Better doc- review

* Better doc. Cleanups. sha3timeout changed

* sha3 - 42mins

* blkn

* Fix spelling issues, duplicate code, and add type hints

* Rm commented code

Done as a separate commit for easy reversion

* review

* blkn

* Remove hardcoded conf

* Fix expression bool test

* Fix sha3concrete test
2019-10-31 15:05:28 -03:00
Eric Kilmer a605cbad39 Update Unicorn to 1.0.2rc1 (#1536)
* Update Unicorn to 1.0.2rc1

* fallback_emulator: Remove unicorn workarounds

* Add XMM and YMM to unicorn testing

* Revert "Add XMM and YMM to unicorn testing"

This reverts commit 0cbc218069.
2019-10-18 11:27:36 -07:00
feliamandDisconnect3d eebc80d2c6 Added storage change detection plugin (#1507)
* Added storage change plugin

* Added storage change plugin

* black

* tests

* blkn

* Try it on all long tests

* fixtests

* Changed state count in truffle tests wti

* blkn

* Update manticore/ethereum/plugins.py

Co-Authored-By: Disconnect3d <[email protected]>

* rewording
2019-09-03 08:03:29 -07:00
Eric Hennenfent 6fa5203e26 Add SHL/SHR/SAR (#1498)
* Test skeleton

* Naive shift implementation

This should be interesting

* Revert "Add error for unsupported solc versions (#1488)"

This reverts commit 65c89302d7.

* Update readme

* Fix unclosed file warning

* Fix Truffle tests (maybe)
2019-08-01 16:10:34 -05:00
Feist Josselin d578e63eb5 Add crytic-compile support (#1406)
* Add crytic-compile support (WIP)

* Add crytic-compile to travis

* Fix incorrect indentation

* Ethereum: Add suffix '.sol' to temporary file
Set CryticCompile logger level to ERROR

* Improve libraries support (including with Solidity > 0.5)
Fix codeclimate issues

* Update to crytic-compile 7dc9b7174d7c677d146f01771c974a560108e69e

* Update to crytic-compile e2c9b45c8f08f4d46e71dd48d5af98c063fd68dd
Refactor _compile (WIP)
Fix typo

* Refactor _compile

* Merge all compilation options to crytic-compile options
Improve code documentation

* Update to crytic-compile 6e39d46b93eb743316148d8ff80ec1d2a2045616

* Fix incorrect kwargs parsing + handle relative working dir

* Minor fixes

* Fix codeclimate issues

* Update to crytic-compile d1f58ebeea2493dfd1b47761603767ec05597b4f

* Minor commit (enable new travis)

* Improve erroe message
Add crytic-compile to setup.py

* Fix merging issue

* Run black
Fix file issue (ethereum.manticore)

* Add truffle test

* Add missing call to run_truffle_tests

* Add missing return statement

* Update travis test (consider missing EIP145 support https://github.com/trailofbits/manticore/issues/1166)
2019-07-11 16:24:46 -04:00
Eric Hennenfent 3ffafd57ec Revert Unicorn Dependency Update (#1459)
* Partial revert for Unicorn Dependency Update

* re-blacken

Okay fine I fixed it. Happy?
2019-06-06 17:54:52 -04:00
Eric Hennenfent ddb833dfa3 Restore old init hook behavior (#1447)
Now only takes the current state as a callback
2019-05-24 14:01:04 -05:00
Eric Hennenfent 95f223ff4c Fix invalid pip argument (#1445)
It's --upgrade (or -U), not --update

I'm not sure why, but I guess Travis' build cache meant we didn't catch this ahead of time
2019-05-23 16:13:18 -05:00
Eric Hennenfent 451965f03a Blacken Manticore (#1438)
* Add black to CI tests

I'd rather have blackening be an optional check, but this will work for now

* Yep, messed up Travis

Again, sorry about the commit spam

* Bump accepted line length to 120

Going to auto-format at 100 but will allow 20% overruns

* Blacken

* Cap line length at 100

rip my undisciplined coding habits

* update black on the fly if necessary

* Ignore CC errors

* Only check modified files

* Only python files

* Re-blacken post merge

* Re-Blacken

* Fix deleted files

* Explicitly invoke python

The +x must not have gotten commited

* Forgot to blacken again

Hoisted on my own petard

* Re-blacken
2019-05-23 15:19:24 -05:00
feliamandEric Hennenfent 39a23a559d Symbolic tests rf otf (#1441)
* Add assertions to auto test gen

* Add symbolic tests

* Make calldata symbolic

* EVM: Support exp aka pow (#1361)

* EVM: Add support for EXP with concrete/solvable exponent

Adds support for EXP aka POW, with concrete or solvable exponent, fixing https://github.com/trailofbits/manticore/issues/1005 effectively.

Not sure if we can do it any better - it seems z3 doesn't have exp/pow for bitvectors.

* Update operators.py

* Update evm.py

* Use concretized_args

* Move Operators.POW to EVM._exp

* Extend travis wait for output to 30m

* Extend travis build to 60m...

* Fix Operators.ITE -> Operators.ITEBV

* Split ethereum travis job to two jobs

* EVM.EXP: concretize base=SAMPLED

* Fix concrete tests: use to_constant

* Fix set storage in concrete tests

* Split ethereum_vm tests into concrete and symbolic

* Fix travis tests

* Split symbolic tests into two jobs

* Split VMTests even more

* More tests split

* [WIP][WIP][WIP] Moving executor functionality to ManticoreBase and refactor concurrency shared data

* Workspace locks

* Concurrency flavor configurable from commandline

* Asserts and refactorrrrrrrs

* Remove unused callback

* Some CC

* Some CC

* Some CC

* Fix solver vs Z3Solver

* Make solver a singleton based on tid/pid. REfactor m._save. Fix some tests

* typo and evm bugfix

* Fix some tests referecing global solver

* Fix concolic tests and more global solver refs

* Fix tests

* CC fixes

* Fix tests. Fix testcase id generation

* Move profiling to a plugin and fix tests

* Add solver intance ref to mem test

* Fix mem workspace tests

* Fix output checking tests

* Fix z3solver ref

* Relax verbosity/log tests

* Moved Workers to its own file

* Relax output tests

* Relax output tests

* Fix profiling test

* Fix more tests

* Default multiprocessing

* Try to clean mcore __del__

* Change Worker life span

* Fix Single mode

* CC

* revert verbosity travis

* CC and solver ref fix

* Relax ouput checking tests and some bugfixes

* running -> ready

* Fixing teeests

* add weak cache to _load

* del debug prints

* Adding config.py support for Enums

* Try/Remove generate_testcase event as it never occurs online. Fix tests

* Fix CC

* Kill the cache when start/stop run. Remove debugprints. clean tests

* Fix travis test _other_

* Fix native tests and timeout

* Fix state.must_be_true

* fix CC

* Changing fstat tets...:
~'

* LLLLLLLLinux tests

* Skip unicorn concrete test for now

* Try fix CodeClimate

* Try fix CodeClimate

* Update evm examples to newest solidity

* Complete transformation of consts.mprocessing to enum

* Add blank line (codeclimate)

* Using the enum instead of the string

* Using the enum instead of the string

* Merge and fix

* CC and debug print

* Move fee consumption to checkpoint so it is not done twice. Fix frontier test generator

* Fix Job Count (and force travis rebuild)

```
0.02s$ ./cc-test-reporter sum-coverage --output - --parts $JOB_COUNT coverage/codeclimate.*.json | ./cc-test-reporter upload-coverage --input -
Error: expected 3 parts, received 4 parts
```

* Add tx number to testcase log

* Attempt to do vmtests on the fly

* Del test verbosity

* Update .travis.yml

Co-Authored-By: Eric Hennenfent <[email protected]>
2019-05-21 17:07:47 -05:00
Eric Kilmer 43b9a0c957 Unicorn dependency update (#1440)
As noted, we should roll this back whenever Unicorn pushes to PyPi

* Remove write to Unicorn x86 FS register

In latest version of unicorn (778171fc9546c1fc3d1341ff1151eab379848ea0)
a write to FS will cause segfault or hang if we try to write to it.

Issue #1434

* Update unicorn dependency to latest commit on master

Latest Unicorn master commit is 778171fc9546c1fc3d1341ff1151eab379848ea0

Issue #1434
2019-05-21 15:49:45 -05:00
feliam 00d551d40f Symbolic tests rf (#1431)
* Add assertions to auto test gen

* Add symbolic tests

* Make calldata symbolic

* EVM: Support exp aka pow (#1361)

* EVM: Add support for EXP with concrete/solvable exponent

Adds support for EXP aka POW, with concrete or solvable exponent, fixing https://github.com/trailofbits/manticore/issues/1005 effectively.

Not sure if we can do it any better - it seems z3 doesn't have exp/pow for bitvectors.

* Update operators.py

* Update evm.py

* Use concretized_args

* Move Operators.POW to EVM._exp

* Extend travis wait for output to 30m

* Extend travis build to 60m...

* Fix Operators.ITE -> Operators.ITEBV

* Split ethereum travis job to two jobs

* EVM.EXP: concretize base=SAMPLED

* Fix concrete tests: use to_constant

* Fix set storage in concrete tests

* Split ethereum_vm tests into concrete and symbolic

* Fix travis tests

* Split symbolic tests into two jobs

* Split VMTests even more

* More tests split

* [WIP][WIP][WIP] Moving executor functionality to ManticoreBase and refactor concurrency shared data

* Workspace locks

* Concurrency flavor configurable from commandline

* Asserts and refactorrrrrrrs

* Remove unused callback

* Some CC

* Some CC

* Some CC

* Fix solver vs Z3Solver

* Make solver a singleton based on tid/pid. REfactor m._save. Fix some tests

* typo and evm bugfix

* Fix some tests referecing global solver

* Fix concolic tests and more global solver refs

* Fix tests

* CC fixes

* Fix tests. Fix testcase id generation

* Move profiling to a plugin and fix tests

* Add solver intance ref to mem test

* Fix mem workspace tests

* Fix output checking tests

* Fix z3solver ref

* Relax verbosity/log tests

* Moved Workers to its own file

* Relax output tests

* Relax output tests

* Fix profiling test

* Fix more tests

* Default multiprocessing

* Try to clean mcore __del__

* Change Worker life span

* Fix Single mode

* CC

* revert verbosity travis

* CC and solver ref fix

* Relax ouput checking tests and some bugfixes

* running -> ready

* Fixing teeests

* add weak cache to _load

* del debug prints

* Adding config.py support for Enums

* Try/Remove generate_testcase event as it never occurs online. Fix tests

* Fix CC

* Kill the cache when start/stop run. Remove debugprints. clean tests

* Fix travis test _other_

* Fix native tests and timeout

* Fix state.must_be_true

* fix CC

* Changing fstat tets...:
~'

* LLLLLLLLinux tests

* Skip unicorn concrete test for now

* Try fix CodeClimate

* Try fix CodeClimate

* Update evm examples to newest solidity

* Complete transformation of consts.mprocessing to enum

* Add blank line (codeclimate)

* Using the enum instead of the string

* Using the enum instead of the string

* Merge and fix

* CC and debug print

* Move fee consumption to checkpoint so it is not done twice. Fix frontier test generator

* Fix Job Count (and force travis rebuild)

```
0.02s$ ./cc-test-reporter sum-coverage --output - --parts $JOB_COUNT coverage/codeclimate.*.json | ./cc-test-reporter upload-coverage --input -
Error: expected 3 parts, received 4 parts
```

* Add tx number to testcase log

* Del test verbosity
2019-05-17 16:49:26 -05:00
Eric Hennenfent 37aeae86b0 System Call Audit (#1384)
* Move unimplemented syscall logging to decorator

Adds [wrapt module](https://wrapt.readthedocs.io/en/latest/) from pypi

* Move unimplemented calls further down

* Add stubs for unimplemented system calls

* Move most stubs back to stub file

A few have been left in linux.py because they're necessary for other projects

* Codeclimate

* Fix discrepancies in syscall ABI

* Removed extraneous void argument for getpid and gettid
* Added missing sigsetsize parameter for rt_sigaction
* Removed incorrect 'flags' parameter on accept (should be on accept4
* Fixed 'SocketDesc' has no attribute 'close' error
* (Partially) Fixed duplicate constraint error with socket file descriptors

* Add gettimeofday and directory handling

* Hacky pipe implementation

Pretend that sockets are pipes and pipes are sockets

* Better support for MSR writing

* Default to success on directory operations

* Codeclimate

* More verbose unimplemented syscall printing

* Fix line overrun before CC calls me out

* Add ftruncate support

* Add link, unlink, and nanosleep

* Add getdents

* Add tests for mkdir and time functions

* Fix codeclimate and force rebuild

* Add pre and post hooks for syscalls

* Fix lingering single quotes

* Handle dumb invocations

* Type-o

* Make emulator follow logging behavior

* CC

* Fix pipe tests

* Fix shadowed name

* Add test for ftruncate

* Add link tests

* Add chmod test

* Rewrite docstrings

Best not to risk licensing issues

* Replace with simple returns

* Strip out unique implementations

Should bring the line count down a bit

* Check that unimplemented syscalls exhibit the proper behavior

* Fix missing keyword 'solver'

* Pass initial states to will_run callback

* Restore debug printouts after run

* Fix existing `init` calls

* Restore old exception behavior

* Move save_run_data to manticore native

* CC

* Refactor finalization call

* Fix save_run_data

I think it makes sense now

* Adjust expected output line counts

* CC [ci skip]

* Rename terminate state on exception to kill state

There's gotta be a better pun about 'overthrowing the state' in there somewhere

* Move time started to manticore_native
2019-05-16 14:45:32 -05:00
feliam a527e81830 ManticoreBase refactor (#1385)
* [WIP][WIP][WIP] Moving executor functionality to ManticoreBase and refactor concurrency shared data

* Workspace locks

* Concurrency flavor configurable from commandline

* Asserts and refactorrrrrrrs

* Remove unused callback

* Some CC

* Some CC

* Some CC

* Fix solver vs Z3Solver

* Make solver a singleton based on tid/pid. REfactor m._save. Fix some tests

* typo and evm bugfix

* Fix some tests referecing global solver

* Fix concolic tests and more global solver refs

* Fix tests

* CC fixes

* Fix tests. Fix testcase id generation

* Move profiling to a plugin and fix tests

* Add solver intance ref to mem test

* Fix mem workspace tests

* Fix output checking tests

* Fix z3solver ref

* Relax verbosity/log tests

* Moved Workers to its own file

* Relax output tests

* Relax output tests

* Fix profiling test

* merge

* Fix more tests

* Default multiprocessing

* Try to clean mcore __del__

* Change Worker life span

* Fix Single mode

* CC

* Merge branch 'master' into dev-executor-refactor

* revert verbosity travis

* CC and solver ref fix

* Relax ouput checking tests and some bugfixes

* running -> ready

* Fixing teeests

* add weak cache to _load

* del debug prints

* Adding config.py support for Enums

* Try/Remove generate_testcase event as it never occurs online. Fix tests

* Fix CC

* Kill the cache when start/stop run. Remove debugprints. clean tests

* Fix travis test _other_

* Fix native tests and timeout

* Fix state.must_be_true

* fix CC

* Merge and fix more tests

* Changing fstat tets...:
~'

* LLLLLLLLinux tests

* Skip unicorn concrete test for now

* Try fix CodeClimate

* Try fix CodeClimate

* Update evm examples to newest solidity

* Complete transformation of consts.mprocessing to enum

* Add blank line (codeclimate)

* Using the enum instead of the string

* Merge branch 'dev-executor-refactor' of github.com:trailofbits/manticore into dev-executor-refactor

* Using the enum instead of the string

* Merge branch 'master' into dev-executor-refactor

* Fix solver instance reference
2019-05-09 20:35:13 -03:00
Nikita Karetnikov 04a1cd3a31 aarch64: add everything except instructions (#1418)
* aarch64: add everything except instructions

Based on disconnect3d/aarch64/skeleton.

* fixup: do not use relative imports

Otherwise, 'scripts/travis_test.sh' fails to work.

* fixup: remove x86-specific code from '_reg_name'

* review: rename the file

* review: avoid wildcard imports

* Revert "fixup: remove x86-specific code from '_reg_name'"

* fixup: support ARM64 in '_reg_name'
2019-04-30 14:57:41 -05:00
Alan aadd7a06e7 Migrate sandshrew concolic executor as Manticore script (#1396)
* Add consolidated sandshrew concolic testing script

* Migrate repository content into one-file script
* Reorganize for code style consistency

* Optimizations to sandshrew script

* Add sandshrew example test cases

* Move test cases over from standalone repo
* Add Makefile

* Add sandshrew documentation files
2019-04-22 16:15:19 -05:00
Logan Campos 220b9499bf PEP-257: Change docstrings using single quotes to double quotes (#1401)
* PEP-257: change docustrings using single quotes to double quotes

Signed-off-by: binaryflesh <[email protected]>

* fix pseudocode in docstring

Signed-off-by: binaryflesh <[email protected]>
2019-04-17 11:53:01 +02:00
Disconnect3d 18265f3292 Refactor tests structure (#1352)
* Refactor tests structure

* Travis: run whole test suite

* Fix travis

* Fix travis

* Fix import

* travis_test.sh: split tests/ directories into jobs

* Fix travis_test.sh

* Fix VMTests proper setup/teardown

* Fix tests
2019-01-17 11:10:02 +01:00
Disconnect3d b39908011c Remove Py3 redundant object inheritance (#1307) 2018-12-17 20:15:06 +01:00
Disconnect3d 580b358678 Refactor generate_testcase events and fix eth verbose trace plugin (#1305)
* WIP

* Add test

* Add missing test data file

* Fix missing testcase msg and assert it in test

* Remove Executor.generate_testcase - just publish event

* Remove redundant import

* Add ManticoreBase._last_run_stats

* Review fixes

* Remove redundant assertions in test_basic_arm

* Elapsed time calc fix
2018-12-17 15:04:00 +01:00
feliam e8a6321707 Add new auto CONCRETE test generator for eth vmTests (#1160)
* New auto evm test generator [WIP]

* New auto test generator for EVM

* New VMTest mcore translator

* Allow to auto-make single tests

* New concrete auto test for vmTests snad tests

* MAke bytecode bytes or array in tests too

* Make bytecode bytes or array in tests too more

* initial timestamp fix

* Fix jmpdest gas test and evm

* New tests style and some fixes

* __init__ in test folders

* Fix VMTest to unitests. Fix Array/ArraySlice default values

* Added rlp to setup.py

* Remove old deprecated tests

* Debugging storage/memory default values

* avoid gas consumption of empty reads

* CC

* Fix .written list for sliced arrays

* Move blocknumber/timestamp out of evmworld

* CC

* Several gas related fix. Frontier concrete pass

* Fix ArrayProxy tests

* Debug travis

* Split the regresion test so it prints . (dots)

* If value is in the cache then it is a known index. optimization

* add main to some unittest

* FIx test maker

* CC and skip slow test

* Skipp other slow test for now

* initial_timestamp -> timestamp

* more skipping

* Fix/mitigate expression copying issue

* Try fix concolic

* Fix simplification so it does not loose taint

* Fix no-testcases and verbosity in tests

* Extra visitor tests

* Extra visitor tests

* Better array slicing test. Code review. Basic fork support. VMTest concrete added

* bump pyevmasm version

* Remove pyevmasm version pinning

* Pyevmasm from github for now

* Setup.py crazyness

* Pyevmasm version bump - again

* Update manticore/platforms/evm.py

Co-Authored-By: feliam <[email protected]>

* Update manticore/platforms/evm.py

Co-Authored-By: feliam <[email protected]>

* Update manticore/platforms/evm.py

Co-Authored-By: feliam <[email protected]>

* Update manticore/platforms/evm.py

Co-Authored-By: feliam <[email protected]>

* Update manticore/platforms/evm.py

Co-Authored-By: feliam <[email protected]>

* Remove cache oddity and fix auto tests

* Add some type checks

* A fix
2018-12-11 15:58:33 -03:00
Disconnect3d a2243f6d13 Move benchmark->prof script and fix it (#1285)
* Move benchmark->prof script and fix it

* Better scripts/prof.py help
2018-12-09 23:42:40 +01:00
Disconnect3d 169904561a Make Manticore installable for separate targets (#1257)
* WIP

* WIP

* WIP

* Optimize imports

* WIP

* WIP

* WIP

* Fix setup.py comment

* Move abitypes to ethereum

* WIP: sth works lol

* Set verbosity from args

* WIP

* Fix evm logging + minor refactor

* Move ply dependency to evm setup

* NOTE: Removed Manticore.evm

* Check deps on setup, other improvements

* Proper ethereum/__init__ external imports

* Fix logging

* Fix imports in tests

* Fix scripts imports

* Fix imports in example scripts

* Fix tests?

* Remove debug print

* Fix circular import

* Fix imports in tests

* Fix verbosity test

* Fix typo

* Fix typo in test

* Fix measure cov

* Small review fixes

* Reviewfix: move STDIN_INPUT~ to consts.stdin_size

* Reviewfix: dont alias evm/native main funcs

* Fix missing consts.stdin_size

* Remove redundant list() call

* Fix types in docstrings

* Use relative imports

* Fix types in docstring

* Move invoke_model back to native State

* Split only to manticore, manticore[native]

* Fix dev and dev-noks setup extras

* Review fixes

* Move core/cpu -> native/cpu

* Update Changelog

* Import fixes

* Fix test imports

* Fix cpu automatic tests imports

* Fix imports in tests

* Fix imports & deprecated warning

* Fix imports

* Fix imports

* Fix imports

* Fix travis measure_cov path

* Add comment about native deps

* Use ManticoreBase.verbosity as static method

* Fix docs build

* Fix loger test

* Move imports: from manticore import issymbolic, istainted

* Docs fixes

* Fix issymbolic import in test
2018-12-03 21:20:55 +01:00
Stephan Tolksdorf a7bf228251 Fix all ResourceWarnings triggered by the test suite (#1224)
* Prevent ResourceWarnings in Z3Solver._stop_proc

* Wrap temporary uses of open in with statement

* Close program file in platforms.linux.Linux destructor

* Close files opened in tests

This commit also ensures that the tempdir created in _create_openat_state in test_linux.py is deleted at the end of the test.

* Fix binary file open modes

* Enable ResourceWarnings in Travis build

* Fix codeclimate issue: bad indent

* Suppress harmless ResourceWarning emitted during the initial abitypes parser table generation
2018-10-27 01:18:48 +02:00
Disconnect3d 5c44a34374 Convert format strings to literal string interpolation [rebased] (#1194)
* Convert format strings to literal string interpolation
This commit converts most (only a couple of exceptions) of the formatted strings in Manticore to follow PEP-0498, literal string interpolation.

* Converted most format strings to f-strings, except for some in tests

* Fixing codeclimate issues

* Updated the new format strings that appeared after merging, fixed a flipped set of parameters

* Fixed another incorrect quote typo

* fixed extra quote typo
2018-10-18 11:03:19 +02:00
redyoshi49q cab7a7f1f7 A massive amount of spellchecking (#1141) 2018-09-18 19:14:44 -04:00
defunct a0c2f76311 Port remaining examples to py3 (#1042)
* port use_def

* port some scripts, cleanup

* ported `scripts/gdb.py` - untested

* misc
2018-08-10 15:28:41 -04:00
feliam 5dbb19e4e8 Dev yolo retvalthing (#1001)
* DAO detector + bugfixes

* The actual benchmark tests

* The actual benchmark tests

* CC

* Experiment reporting the finding at a JUMPI

* Fix taint. Detect returned overflowded data

* DAO -> Reentrancy

* DAO -> reentrancy, C -> Benchmark

* DAO -> reentrancy, C -> Benchmark

* Allow function names to have numbers

* Fix contract names in benchmark

* Fix contract names in benchmark

* Move default plugin registration

* Better regexp

* Fix minimal_bytecode example

* Fix Array Slice and test

* add tests

* correct other bug

* implement bytesM

* BROKEN partial progress

* need bytearray here

* rm cmt

* add basic tests for bytesM and bytes symbolic

* correct bytes symbolic test

* Refactor, clean bytesM handling

* Add initial symbolic 'bytes' handling

* refactor tests

* Unify symbolic/concrete bytes handling in bytesM/bytes

* Rm import

* Rm debug assert

* cc

* Visitor/migrate/simplify fixes to make the seth refactor pass

* Fix concolic?

* Fix concolic?

* CC

* bytesM fix

* Fix address and caller concretization on symb tx

* Fix/refactor symbolic address/caller concretization

* Fix caller concretization

* Fix expression visiting

* Fix account policy refactor

* Accept numbers in function names abitypes

* Simplify installation instructions to recommend install manticore only for the current user

* Run some tests in parallel (#970)

This PR splits the current test runner into three environments: 

1. Linux examples
2. Ethereum tests
3. Remaining tests

to faster complete each testing run. Ethereum tests include a number of integration tests that execute scripts to completion, which takes a while. We run them concurrently with other tests to save on execution time. The split is done by naming Ethereum tests differently (`eth_*.py` vs `test_*.py`) and updating what pattern unittest's `discover` uses.

This change also updates the installation script and chooses to forego installing Keystone for EVM tests as it takes a while, and it adds a `setup.cfg` config file so that Nose finds the eth tests as well by default.

* Be less verbose when testing

* Fix slicing wrongly reference to proxyArray. Fix #912

* Only export human/external tx in the testcase (#972)

* Make ManticoreEVM.make_symbolic_value size adjustable (#974)

* Make size adjustable

* Default to 256

* Dev evm yolo fix gas (#975)

* Fix gas stipend on CALL and check dao

* Add order dependence 1

* Going linter. Report/Detect that thing when code does not check returned value

* cleaner example of fail

* Update retval_crazy.sol

* new solc for travis

* CC

* Remove duplicated ReentrancyDetector

* POrt to py3

* POrt to py3

* P0rt to py3

* CC

* Tests doc

* CC
2018-08-06 18:01:41 -03:00
Yan Ivnitskiy 99f158aa35 Report test coverage to CodeClimate (#1004)
This PR enables the reporting of test coverage of all the test jobs (`eth` and `tests`) to CodeClimate. This uses S3 to temporarily store results between jobs and later upload them to CC.

Fixes #1000
2018-07-31 18:39:57 +00:00