From: Michael Altizer (mialtize) Date: Sun, 31 Mar 2019 05:23:43 +0000 (-0400) Subject: Merge pull request #1563 in SNORT/snort3 from ~MIALTIZE/snort3:safec to master X-Git-Tag: 3.0.0-251~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1ffd89b3f6d0032f8ea1171b8c62ab967ae1223a;p=thirdparty%2Fsnort3.git Merge pull request #1563 in SNORT/snort3 from ~MIALTIZE/snort3:safec to master Squashed commit of the following: commit e71b6d78753ce9d363c87fd451bea6bb23e6a07d Author: Michael Altizer Date: Sat Mar 30 15:50:25 2019 -0400 safec: Update to work with modern versions of LibSafeC Tested with LibSafeC v30122018 3.4. LibSafeC is currently incompatible with Clang. - See: https://github.com/rurban/safeclib/issues/58 --- diff --git a/CMakeLists.txt b/CMakeLists.txt index e06881f82..8ba889448 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -133,7 +133,7 @@ else () RPC DB: Built-in") endif () -if (HAVE_SAFEC AND SAFEC_ENABLED) +if (HAVE_SAFEC) message("\ SafeC: ON") else () diff --git a/cmake/FindSafeC.cmake b/cmake/FindSafeC.cmake index 5cf310c39..a91323a54 100644 --- a/cmake/FindSafeC.cmake +++ b/cmake/FindSafeC.cmake @@ -1,22 +1,34 @@ -find_path (SAFEC_INCLUDE_DIR - NAMES libsafec/safe_lib.h -) -if (SAFEC_INCLUDE_DIR) - find_library(SAFEC_LIBRARIES - NAMES safec-1.0 - ) -else() - set(SAFEC_INCLUDE_DIR "") -endif() +find_package(PkgConfig) + +# LibSafeC is currently incompatible with Clang - https://github.com/rurban/safeclib/issues/58 +if (PKG_CONFIG_EXECUTABLE AND NOT CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} --list-all + OUTPUT_VARIABLE _pkgconfig_list_result + OUTPUT_STRIP_TRAILING_WHITESPACE) + string(REGEX MATCH "safec-([0-9]+\.[0-9])+" MATCHED ${_pkgconfig_list_result}) + if (MATCHED) + set(SAFEC_VERSION ${CMAKE_MATCH_1}) + pkg_check_modules(PC_SAFEC safec-${SAFEC_VERSION}) -if (SAFEC_LIBRARIES) - set(HAVE_SAFEC "1") + find_path(SAFEC_INCLUDE_DIR + NAMES libsafec/safe_lib.h + HINTS ${PC_SAFEC_INCLUDEDIR} ${PC_SAFEC_INCLUDEDIRS} + NO_SYSTEM_ENVIRONMENT_PATH + ) + find_library(SAFEC_LIBRARIES + NAMES safec-${SAFEC_VERSION} + HINTS ${PC_SAFEC_LIBDIR} ${PC-SAFEC_LIBRARY_DIRS} + ) + endif() endif() include(FindPackageHandleStandardArgs) - find_package_handle_standard_args(SafeC REQUIRED_VARS SAFEC_INCLUDE_DIR SAFEC_LIBRARIES ) +mark_as_advanced( + SAFEC_INCLUDE_DIR + SAFEC_LIBRARIES +) diff --git a/cmake/include_libraries.cmake b/cmake/include_libraries.cmake index 482d92eda..401302f15 100644 --- a/cmake/include_libraries.cmake +++ b/cmake/include_libraries.cmake @@ -19,7 +19,9 @@ find_package(Asciidoc QUIET) find_package(DBLATEX QUIET) find_package(Ruby QUIET 1.8.7) find_package(HS QUIET 4.4.0) -find_package(SafeC QUIET) +if (ENABLE_SAFEC) + find_package(SafeC QUIET) +endif (ENABLE_SAFEC) find_package(Flatbuffers QUIET) find_package(ICONV QUIET) find_package(UUID QUIET) diff --git a/cmake/sanity_checks.cmake b/cmake/sanity_checks.cmake index 333c23573..3f2a46b20 100644 --- a/cmake/sanity_checks.cmake +++ b/cmake/sanity_checks.cmake @@ -143,3 +143,7 @@ if (ICONV_FOUND) # Not actually a sanity check at the moment... set (HAVE_ICONV "1") endif() + +if (SAFEC_FOUND) + check_library_exists (${SAFEC_LIBRARIES} printf_s "" HAVE_SAFEC) +endif() diff --git a/config.cmake.h.in b/config.cmake.h.in index 98cbb6c98..624d5ec73 100644 --- a/config.cmake.h.in +++ b/config.cmake.h.in @@ -127,7 +127,6 @@ /* safec available */ #cmakedefine HAVE_SAFEC 1 -#cmakedefine ENABLE_SAFEC 1 #cmakedefine HAVE_FLATBUFFERS 1 diff --git a/doc/tutorial.txt b/doc/tutorial.txt index fdbb68898..7eef4f7c2 100644 --- a/doc/tutorial.txt +++ b/doc/tutorial.txt @@ -56,7 +56,7 @@ Optional: * lzma >= 5.1.2 from http://tukaani.org/xz/ for decompression of SWF and PDF files -* safec from https://sourceforge.net/projects/safeclib/ for runtime bounds +* safec from https://github.com/rurban/safeclib/ for runtime bounds checks on certain legacy C-library calls * source-highlight from http://www.gnu.org/software/src-highlite/ to diff --git a/src/utils/safec.h b/src/utils/safec.h index 888fd9c0b..0311cef00 100644 --- a/src/utils/safec.h +++ b/src/utils/safec.h @@ -20,12 +20,12 @@ #ifndef UTILS_SAFEC_H #define UTILS_SAFEC_H -//FIXIT-M combine these macros in the build foo -#if defined(HAVE_SAFEC) && defined(ENABLE_SAFEC) +#ifdef HAVE_SAFEC extern "C" { -#include +#include +#include } #else