Compare commits

...

2 commits

Author SHA1 Message Date
Johann Dreo
c8d148cf97 fix(depth): avoid overflow when manually setting depth
Setting the depth to INTMAX was overflowing if strep calls was also set,
resulting in no log triggered.
2024-10-01 09:47:23 +02:00
Johann Dreo
28f50d0bad fix(depth): handle underflow gracefully
If asked for stripping more calls than the actual depth,
clutchlog was going in an infinite loop.
2024-09-21 11:07:51 +02:00

View file

@ -32,6 +32,7 @@
#define CLUTCHLOG_HAVE_UNIX_SYSINFO 1
#else
#define CLUTCHLOG_HAVE_UNIX_SYSINFO 0
// #pragma message("[clutchlog] no POSIX SYSINFO header")
#endif
//! True if the system can handle the `hfill` feature.
@ -42,6 +43,7 @@
#define CLUTCHLOG_HAVE_UNIX_SYSIOCTL 1
#else
#define CLUTCHLOG_HAVE_UNIX_SYSIOCTL 0
// #pragma message("[clutchlog] no POSIX SYSIOCTL header")
#endif
@ -52,7 +54,12 @@
#ifndef NDEBUG
//! Actually enable clutchlog features.
#define WITH_CLUTCHLOG
// #pragma message("[clutchlog] automatically enabled")
// #else
// #pragma message("[clutchlog] automatically disabled")
#endif
// #else
// #pragma message("[clutchlog] manually enabled")
#endif
/**********************************************************************
@ -171,6 +178,7 @@
#define CLUTCHDUMP( LEVEL, CONTAINER, FILENAME ) do {/*nothing*/} while(0)
#define CLUTCHFUNC( LEVEL, FUNC, ... ) do {/*nothing*/} while(0)
#define CLUTCHCODE( LEVEL, CODE ) do {/*nothing*/} while(0)
// #pragma message("[clutchlog] fully disabled")
#endif // WITH_CLUTCHLOG
/**********************************************************************
@ -999,7 +1007,9 @@ class clutchlog
#if CLUTCHLOG_HAVE_UNIX_SYSINFO == 1
//! Set the stack depth above which logs are not printed.
void depth(size_t d) {_depth = d;}
void depth(size_t d) {
_depth = std::min(d, std::numeric_limits<size_t>::max() - _strip_calls);
}
//! Get the stack depth above which logs are not printed.
size_t depth() const {return _depth;}
@ -1333,7 +1343,10 @@ class clutchlog
row = replace(row, "\\{level_short\\}", _level_short.at(stage));
#if CLUTCHLOG_HAVE_UNIX_SYSINFO == 1
size_t actual_depth = depth - _strip_calls;
size_t actual_depth = 0;
if( _strip_calls < depth) {
actual_depth = depth - _strip_calls;
}
row = replace(row, "\\{name\\}", name);
row = replace(row, "\\{depth\\}", actual_depth);
@ -1358,6 +1371,7 @@ class clutchlog
row = replace(row, "\\{depth_marks\\}", chevrons.str());
}
#endif
row = replace(row, "\\{level_fmt\\}", _level_fmt.at(stage).str());
row = replace(row, "\\{filehash_fmt\\}", fmt::hash(file, _filehash_fmts).str() );
row = replace(row, "\\{funchash_fmt\\}", fmt::hash(func, _funchash_fmts).str() );