Changeset

12221:056b7920b686

util.format: Expand explanation of purpose in comments
author Kim Alvefur <zash@zash.se>
date Thu, 27 Jan 2022 21:40:13 +0100
parents 12220:25b853e64d83
children 12222:61592927335b
files util/format.lua
diffstat 1 files changed, 6 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/util/format.lua	Thu Jan 27 21:14:22 2022 +0100
+++ b/util/format.lua	Thu Jan 27 21:40:13 2022 +0100
@@ -1,6 +1,9 @@
 --
--- A string.format wrapper that gracefully handles invalid arguments
+-- A string.format wrapper that gracefully handles invalid arguments since
+-- certain format string and argument combinations may casue errors or other
+-- issues like log spoofing
 --
+-- Provides some protection from e.g. CAPEC-135, CWE-117, CWE-134, CWE-93
 
 local tostring = tostring;
 local unpack = table.unpack or unpack; -- luacheck: ignore 113/unpack
@@ -109,6 +112,8 @@
 			if not valid_utf8(arg) then
 				option = "q";
 			elseif option ~= "q" then -- gets fully escaped in the next block
+				-- Prevent funny things with ASCII control characters and ANSI escape codes (CWE-117)
+				-- Also ensure embedded newlines can't look like another log line (CWE-93)
 				args[i] = arg:gsub("[%z\1-\8\11-\31\127]", control_symbols):gsub("\n\t?", "\n\t");
 				return spec;
 			end