From 8bd8cac9ef1d24899aba952b178602da56cede3d Mon Sep 17 00:00:00 2001 From: Bryce Kwon Date: Sat, 7 Nov 2026 11:06:29 -1000 Subject: Time the other filters at two lengths as well The avatar checks held a 40000 byte address to half a second, twenty times tighter than the readme budget that already failed on a slow host, and in stub mode nearly all of that time went on the fake digest. Link-commits and link-trailers had no check on a long input at all. The readme checks' method moves into the harness so all four share it. A single timing of each length let a busy host that took the CPU away during the longer one make a linear pass look quadratic. The lengths now take turns and the fastest timing of each counts, since a busy host can slow one timing but rarely all five. A ratio under six ends the turns at once, so only one near the bound of ten waits for all five. --- tests/extensions/test-link-trailers.lua | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'tests/extensions/test-link-trailers.lua') diff --git a/tests/extensions/test-link-trailers.lua b/tests/extensions/test-link-trailers.lua index c4dfdf5..7912d3e 100644 --- a/tests/extensions/test-link-trailers.lua +++ b/tests/extensions/test-link-trailers.lua @@ -106,4 +106,10 @@ out = render("CVE", "CVE-2024-12345") h.equals("the shipped CVE example links to its record", out, "CVE-2024-12345") +-- A long value of url starts is checked against the url pattern once, from +-- its start, so it costs no more than its length. +h.stays_linear("a long value is checked in linear time", function(text) + return (render("Link", text)) +end, function(count) return string.rep("http://", count) .. " " end, 10000) + h.finish() -- cgit 2.12.1