diff --git a/.travis.yml b/.travis.yml index 236e8da7..3d46487f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,10 +16,9 @@ env: addons: apt: - sources: ['ubuntu-toolchain-r-test'] - packages: - - gcc-5 - - g++-5 + sources: &base_sources + - ubuntu-toolchain-r-test + packages: &base_packages - python-software-properties - libssl-dev - libffi-dev @@ -35,7 +34,7 @@ addons: matrix: include: - # GCC/Coverage/Autobahn (if master or develop branch) + # gcc coverage (+valgrind,+Autobahn if master or develop) - compiler: gcc env: - GCC_VER=5 @@ -43,27 +42,99 @@ matrix: - ADDRESS_MODEL=64 - BUILD_SYSTEM=cmake - PATH=$PWD/cmake/bin:$PATH + addons: + apt: + packages: + - gcc-5 + - g++-5 + - *base_packages + sources: + - *base_sources - # Clang/UndefinedBehaviourSanitizer + # older GCC, release + - compiler: gcc + env: + - GCC_VER=4.8 + - VARIANT=release + - ADDRESS_MODEL=64 + addons: + apt: + packages: + - gcc-4.8 + - g++-4.8 + - *base_packages + sources: + - *base_sources + + # later GCC + - compiler: gcc + env: + - GCC_VER=6 + - VARIANT=release + - ADDRESS_MODEL=64 + - BUILD_SYSTEM=cmake + - PATH=$PWD/cmake/bin:$PATH + addons: + apt: + packages: + - gcc-6 + - g++-6 + - *base_packages + sources: + - *base_sources + + # clang ubsan+asan - compiler: clang env: - GCC_VER=5 - - VARIANT=usan + - VARIANT=ubasan - CLANG_VER=3.8 - ADDRESS_MODEL=64 - UBSAN_OPTIONS='print_stacktrace=1' - BUILD_SYSTEM=cmake - PATH=$PWD/cmake/bin:$PATH - PATH=$PWD/llvm-$LLVM_VERSION/bin:$PATH + addons: + apt: + packages: + - gcc-5 + - g++-5 + - *base_packages + sources: + - *base_sources + + # Clang/UndefinedBehaviourSanitizer + #- compiler: clang + # env: + # - GCC_VER=4.8 + # - VARIANT=usan + # - CLANG_VER=3.8 + # - ADDRESS_MODEL=64 + # - UBSAN_OPTIONS='print_stacktrace=1' + # - BUILD_SYSTEM=cmake + # - PATH=$PWD/cmake/bin:$PATH + # - PATH=$PWD/llvm-$LLVM_VERSION/bin:$PATH + # addons: + # apt: + # packages: + # - *base_packages + # sources: + # - *base_sources # Clang/AddressSanitizer - - compiler: clang - env: - - GCC_VER=5 - - VARIANT=asan - - CLANG_VER=3.8 - - ADDRESS_MODEL=64 - - PATH=$PWD/llvm-$LLVM_VERSION/bin:$PATH + #- compiler: clang + # env: + # - GCC_VER=5 + # - VARIANT=asan + # - CLANG_VER=3.8 + # - ADDRESS_MODEL=64 + # - PATH=$PWD/llvm-$LLVM_VERSION/bin:$PATH + # addons: + # apt: + # packages: + # - *base_packages + # sources: + # - *base_sources cache: directories: @@ -72,7 +143,7 @@ cache: - llvm-$LLVM_VERSION - cmake -before_install: +before_install: &base_before_install - scripts/install-dependencies.sh script: diff --git a/CHANGELOG.md b/CHANGELOG.md index 8e186014..0d9aa0ad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ Version 40 * Add to_static_string * Consolidate get_lowest_layer in type_traits.hpp * Fix basic_streambuf movable trait +* Tidy up .travis.yml -------------------------------------------------------------------------------- diff --git a/CMakeLists.txt b/CMakeLists.txt index 6121b551..d6645053 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -115,6 +115,12 @@ if ("${VARIANT}" STREQUAL "coverage") set(CMAKE_BUILD_TYPE RELWITHDEBINFO) set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lgcov") +elseif ("${VARIANT}" STREQUAL "ubasan") + set(CMAKE_CXX_FLAGS + "${CMAKE_CXX_FLAGS} -funsigned-char -fno-omit-frame-pointer -fsanitize=address,undefined -fsanitize-blacklist=${PROJECT_SOURCE_DIR}/scripts/blacklist.supp") + set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address,undefined") + set(CMAKE_BUILD_TYPE RELWITHDEBINFO) + elseif ("${VARIANT}" STREQUAL "asan") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -funsigned-char -fsanitize=address -fno-omit-frame-pointer") @@ -123,7 +129,7 @@ elseif ("${VARIANT}" STREQUAL "asan") elseif ("${VARIANT}" STREQUAL "usan") set(CMAKE_CXX_FLAGS - "${CMAKE_CXX_FLAGS} -fsanitize=undefined -fsanitize-blacklist=${PROJECT_SOURCE_DIR}/scripts/usan.supp -fno-omit-frame-pointer") + "${CMAKE_CXX_FLAGS} -fsanitize=undefined -fsanitize-blacklist=${PROJECT_SOURCE_DIR}/scripts/blacklist.supp -fno-omit-frame-pointer") set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=undefined") set(CMAKE_BUILD_TYPE RELWITHDEBINFO) diff --git a/Jamroot b/Jamroot index 11bb39d5..f3234aef 100644 --- a/Jamroot +++ b/Jamroot @@ -60,6 +60,14 @@ variant coverage "-lgcov" ; +variant ubasan + : + release + : + "-funsigned-char -fno-omit-frame-pointer -fsanitize=address,undefined -fsanitize-blacklist=scripts/blacklist.supp" + "-fsanitize=address,undefined" + ; + variant asan : release @@ -80,7 +88,7 @@ variant usan : debug : - "-fsanitize=undefined -fsanitize-blacklist=scripts/usan.supp -fno-omit-frame-pointer" + "-fsanitize=undefined -fsanitize-blacklist=scripts/blacklist.supp -fno-omit-frame-pointer" "-fsanitize=undefined" ; diff --git a/TODO.txt b/TODO.txt deleted file mode 100644 index 13de4b34..00000000 --- a/TODO.txt +++ /dev/null @@ -1,58 +0,0 @@ -* Add writer::prepare(msg&) interface to set Content-Type - -Boost.Http -* Use enum instead of bool in isRequest - -Docs: -* Include Example program listings in the docs -* Fix index in docs -* melpon sandbox? -* Implement cleanup-param to remove spaces around template arguments - e.g. in basic_streambuf move constructor members -* Don't put using namespace at file scope in examples, - do something like "using ba = boost::asio" instead. - -Core: -* Replace Jamroot with Jamfile -* Fix bidirectional buffers iterators operator->() -* Complete allocator testing in basic_streambuf - -WebSocket: -* Minimize sizeof(websocket::stream) -* Move check for message size limit to account for compression -* more invokable unit test coverage -* More control over the HTTP request and response during handshakes -* optimized versions of key/masking, choose prepared_key size -* Give callers control over the http request/response used during handshake -* Investigate poor autobahn results in Debug builds -* Fall through composed operation switch cases -* Use close_code::no_code instead of close_code::none -* Make request_type, response_type public APIs, - use in stream member function signatures - -HTTP: -* Define Parser concept in HTTP - - Need parse version of read() so caller can set parser options - like maximum size of headers, maximum body size, etc -* add bool should_close(message_v1 const&) to replace the use - of eof return value from write and async_write -* More fine grained parser errors -* HTTP parser size limit with test (configurable?) -* HTTP parser trailers with test -* Decode chunk encoding parameters -* URL parser, strong URL character checking in HTTP parser -* Fix prepare() calling content_length() without init() -* Complete allocator testing in basic_streambuf, basic_headers -* Custom HTTP error codes for various situations -* Branch prediction hints in parser -* Check basic_parser_v1 against rfc7230 for leading message whitespace -* Fix the order of message constructor parameters: - body first then headers (since body is constructed with arguments more often) -* Unit tests for char tables -* Remove status_code() from API when isRequest==true, et. al. -* Permit sending trailers and parameters in chunk-encoding chunks - -Future: - -* SOCKS proxy client and server implementations - diff --git a/scripts/usan.supp b/scripts/blacklist.supp similarity index 100% rename from scripts/usan.supp rename to scripts/blacklist.supp