Skip to content

Stringop overread warning in Codec #766

@diehard2

Description

@diehard2

I recently upgraded to version 9 and I'm seeing a warning that doesn't sound great. I'm on GCC 13 on ARM

In function ‘const void* memchr(const void*, int, size_t)’,
[build]     inlined from ‘size_t quill::v9::detail::safe_strnlen(const char*, size_t)’ at /home/dev/permanent_data/build/vcpkg_installed/dds-arm/include/quill/core/Codec.h:96:50,
[build]     inlined from ‘static size_t quill::v9::Codec<Arg, <template-parameter-1-2> >::compute_encoded_size(quill::v9::detail::SizeCacheVector&, const Arg&) [with Arg = const char*; <template-parameter-1-2> = void]’ at /home/dev/permanent_data/build/vcpkg_installed/dds-arm/include/quill/core/Codec.h:138:40,
[build]     inlined from ‘size_t quill::v9::detail::compute_encoded_size_and_cache_string_lengths(SizeCacheVector&, const Args& ...) [with Args = {const char*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >}]’ at /home/dev/permanent_data/build/vcpkg_installed/dds-arm/include/quill/core/Codec.h:318:67,
[build]     inlined from ‘bool quill::v9::LoggerImpl<TFrontendOptions>::log_statement(quill::v9::LogLevel, const quill::v9::MacroMetadata*, Args&& ...) [with bool immediate_flush = false; bool has_dynamic_log_level = false; Args = {const char*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&}; TFrontendOptions = quill::v9::FrontendOptions]’ at /home/dev/permanent_data/build/vcpkg_installed/dds-arm/include/quill/Logger.h:136:60,
[build]     inlined from ‘std::vector<MyKeyValue> Adapter::read(std::vector<MyKey>&, settings&)’ at /home/dev/permanent_data/environment/../src/myfile.h:183:9:
[build] /usr/include/string.h:86:27: warning: ‘void* __builtin_memchr(const void*, int, long unsigned int)’ specified bound 4294967295 exceeds source size 13 [-Wstringop-overread]
[build]    86 |   return __builtin_memchr (__s, __c, __n);

The line causing it is nothing unusual (mildly sanitized from company code). record() and unhashed_key() are both strings

 LOG_TRACE_L3(loggerp, "Read {} key: {} - unhashed - {}", is_super ? "SUPER" : "NOT_SUPER",
                     key.record(), key.unhashed_key());

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions