From 28f50d0badd8471e8ae3221ecd2ac9338ffa9bd3 Mon Sep 17 00:00:00 2001 From: Johann Dreo Date: Sat, 21 Sep 2024 11:07:51 +0200 Subject: [PATCH] fix(depth): handle underflow gracefully If asked for stripping more calls than the actual depth, clutchlog was going in an infinite loop. --- clutchlog/clutchlog.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/clutchlog/clutchlog.h b/clutchlog/clutchlog.h index eeace5a..764529d 100644 --- a/clutchlog/clutchlog.h +++ b/clutchlog/clutchlog.h @@ -1333,7 +1333,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 +1361,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() );