diff --git a/CMakeLists.txt b/CMakeLists.txt index db78e5fd8..952429e60 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -96,6 +96,10 @@ set_property(CACHE ENABLE_DOC PROPERTY STRINGS ${TRISTATE_VALUES}) # so we can use our bundled finders set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/Modules") +# add source path prefix length to be able to crop it in logs +string(LENGTH "${CMAKE_SOURCE_DIR}/" SOURCE_PATH_SIZE) +add_definitions("-DSOURCE_PATH_SIZE=${SOURCE_PATH_SIZE}") + # required modules include(CTest) include(FetchContent) @@ -194,6 +198,11 @@ if (ENABLE_DOC) include(AdocMan) endif() +# make sure that msvc set full path in __FILE__ macro +if(MSVC) + add_compile_options(/FC) +endif() + # everything else is in subdirs add_subdirectory(src/examples) if (ENABLE_FUZZERS) diff --git a/src/lib/logging.h b/src/lib/logging.h index bebb7bc46..5f5f46835 100644 --- a/src/lib/logging.h +++ b/src/lib/logging.h @@ -58,13 +58,15 @@ class LogStop { }; } // namespace rnp -#define RNP_LOG_FD(fd, ...) \ - do { \ - if (!rnp_log_switch()) \ - break; \ - (void) fprintf((fd), "[%s() %s:%d] ", __func__, __FILE__, __LINE__); \ - (void) fprintf((fd), __VA_ARGS__); \ - (void) fprintf((fd), "\n"); \ +#define __SOURCE_PATH_FILE__ (__FILE__ + SOURCE_PATH_SIZE + 3 /* remove "src" */) + +#define RNP_LOG_FD(fd, ...) \ + do { \ + if (!rnp_log_switch()) \ + break; \ + (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \ + (void) fprintf((fd), __VA_ARGS__); \ + (void) fprintf((fd), "\n"); \ } while (0) #define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__) diff --git a/src/tests/cli_tests.py b/src/tests/cli_tests.py index 7778cea55..b619e605c 100755 --- a/src/tests/cli_tests.py +++ b/src/tests/cli_tests.py @@ -4301,6 +4301,11 @@ def test_default_v5_key(self): shutil.rmtree(RNP2, ignore_errors=True) + def test_warning_source_path_prefix_cropping(self): + ret, _, err = run_proc(RNPK, ['--keyfile', data_path(PUBRING_7), '--notty', '--list-keys']) + self.assertEqual(ret, 0) + self.assertRegex(err, r'(?s)^.*\[signature_validate\(\) /lib/crypto/signatures.cpp:[0-9]*\] Insecure hash algorithm [0-9]*, marking signature as invalid.*$') + class Encryption(unittest.TestCase): ''' Things to try later: