From adec93b7f4a5db0f74decfa7283dfa53946d64c8 Mon Sep 17 00:00:00 2001 From: Squibid Date: Thu, 3 Jul 2025 17:02:33 -0400 Subject: [PATCH] fix formatting log lines causing errors --- lua/dep/ui/format.lua | 33 +++++++++++++++++++++++---------- tests/dep_spec.lua | 8 ++++++++ 2 files changed, 31 insertions(+), 10 deletions(-) diff --git a/lua/dep/ui/format.lua b/lua/dep/ui/format.lua index 0428ae4..63e6068 100644 --- a/lua/dep/ui/format.lua +++ b/lua/dep/ui/format.lua @@ -20,16 +20,29 @@ end ---@param log_line string log line ---@return chunk[] chunks function format.log_line(log_line) - local log_time = string.sub( log_line, string.find(log_line, "%[") + 1, - string.find(log_line, "%]") - 1) - local colon = string.find(log_line, ":", 11) - local log_path = string.sub(log_line, string.find(log_line, "%]") + 2, - colon - 1) - local log_path_ln = string.sub(log_line, colon + 1, - string.find(log_line, ":", colon + 1) - 1) - local level = string.sub(log_line, string.find(log_line, "%(") + 1, - string.find(log_line, "%)") - 1) - local rest = string.sub(log_line, string.find(log_line, "%)") + 2) + -- make sure we don't do operations on nil values + if not log_line or log_line == "" then + return {} + end + + -- error on any nil values, this should prevent us from parsing an incorrectly + -- formatted log line + local log_time, colon, log_path, log_path_ln, level, rest + local ok = pcall(function() + log_time = string.sub(log_line, string.find(log_line, "%[") + 1, + string.find(log_line, "%]") - 1) + colon = string.find(log_line, ":", 11) + log_path = string.sub(log_line, string.find(log_line, "%]") + 2, + colon - 1) + log_path_ln = string.sub(log_line, colon + 1, + string.find(log_line, ":", colon + 1) - 1) + level = string.sub(log_line, string.find(log_line, "%(") + 1, + string.find(log_line, "%)") - 1) + rest = string.sub(log_line, string.find(log_line, "%)") + 2) + end) + if not ok then + return {} + end return { { "[", "" }, diff --git a/tests/dep_spec.lua b/tests/dep_spec.lua index 203c6c8..a89d198 100644 --- a/tests/dep_spec.lua +++ b/tests/dep_spec.lua @@ -17,6 +17,14 @@ describe("ui log formatting", function() }, dep_ui_format.log_line("[11:22:33] file.lua:1:(vim) some fancy message") ) + + -- malformed log line + assert.same({}, + dep_ui_format.log_line("11:22:33] file.lua:1:(vim) some fancy message")) + + -- test nil values + assert.same({}, dep_ui_format.log_line("")) + assert.same({}, dep_ui_format.log_line(nil)) end) end)