| Age | Commit message (Collapse) | Author | Lines |
|
Nothing read the expiry signed into a granted session. validate_value
treats 0 as never expiring, so a login that signed its session with 0
passed, since the Max-Age the browser is told comes from set_cookie
alone. The expiry second itself is now held to be too late, with the
clock held still, as a comparison of < instead of <= passed too.
|
|
The only tampering tried was a flipped signature, a field swapped for
another and the binding, so a payload that left out the expiry, the
salt or the value still passed, and a captured session could have been
extended for ever.
|
|
Every check signed and verified under one pinned secret, so a sign()
that left the secret out of the HMAC key, which makes every cookie
forgeable, passed.
|
|
The checks replaced get_secret with a constant, so its success path
never ran, and the luaposix stand-in had no link or unlink and a umask
that ignored its argument. Dropping the tightened mask, which leaves
the secret readable by everyone under the usual 022, or accepting a
short secret, passed. The real get_secret now makes the secret in the
run's directory through stand-ins that behave like the calls they
replace, and the checks cover the mask and its restoration, the link
race, the temporary file, reuse and a secret written by hand.
|
|
test-auth.lua wrote its fixtures into whatever directory it was started
from, so a run by hand from the checkout left auth-users and its
siblings behind, and the checks assumed no auth-users-missing or
no-such-directory already sat there. It now refuses to run without a
directory, and t0505 hands each interpreter and variant a fresh one.
The interpreter and paths are expanded inside the test body rather than
pasted into it in single quotes, so a path holding a quote no longer
breaks the eval.
|
|
With one pair of brackets, matching the innermost pair would have
passed the old check as well.
|
|
|
|
Lua's own print wrote outside the collected output, so a stray print
in a filter passed every check while under cgit it lands on the page.
html_url_arg and html_include were missing, which only a filter using
them would have found.
|
|
A short object name was checked only for a missing anchor, and the
value that passes through untouched never held the entities cgit
escapes it with, so escaping it again would have passed.
|
|
Four checks only looked for a missing anchor, which output with the
text dropped also passes, and no message held the entities cgit
escapes it with.
|
|
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.
|
|
The stub mode checks only compared hashes with each other, and the
stand-in digest took any algorithm name, so md5, a misspelt sha256 or
hex in capitals passed everywhere luaossl is missing, which is every
machine here. The comparisons also passed with no hash found on either
side.
|
|
Skipping a malformed rule, a rule without a key, the switch for bare
urls and the shipped CVE example were untested, and the only url kept
from linking was one holding a quote, so a broader scheme check would
have let javascript:// through.
|
|
Skipping a malformed rule, the tie between two rules, the scan past an
empty match, a rule with no capture and the switch for object names
were all untested, and none of the shipped examples beyond the issue
rule had ever been loaded.
|
|
No token ever took hl-type or hl-comment, so a typo in either row, or a
rule gone from the stylesheet, passed. Nothing fed the filter a NUL
byte or a blob of exactly the size cap either.
|
|
A module called lexer that is not Scintillua, a Scintillua older than
6.0 without detect(), lexers that cannot load lpeg and a lexer that
returns no token list were all documented and none was tried.
|
|
|
|
|
|
The changelog for 2.12.0 says a list split by a code block keeps
counting, and only the split by a blank line was checked.
|
|
Four checks only looked for something missing, which a dropped or
plain text rendering also satisfies, and the spacing macro check
missed a 0 drawn at the start of a line.
|
|
A repeat's count was keyed on the bare text, so a heading whose text
already ended in that count took the same anchor, as "Twice 1" did
after two of "Twice", and "About 1" after "About". A link to either
then landed on the first. The count now goes on up past any anchor
already handed out, the way GitHub's slugger does.
|
|
The emphasis bomb checked only that the output was not empty, which it
never is, and its input never nests. No input reaches the ceiling on
inline nesting either, since an emphasis cannot hold its own kind, so
the check now proves the nesting that does happen. Past the quote
ceiling only the innermost text was looked for, and any x passed.
|
|
|
|
Every check set CGIT_SCINTILLUA_PATH, which the filter takes as given,
so the line for a server with no Scintillua at all never ran and
deleting it passed. The harness can now clear a variable and hide the
directories the filter probes. A lexer.lua anywhere on LUA_PATH also
loaded in place of the missing one, so the fallback runs now keep
every Lua module out of reach.
|
|
The page without icons was checked only where cgit's Lua lacked
luaossl, so a machine that has it never ran the fallback. It now runs
with every Lua search path pointed at an empty directory, and the log
line is compared whole. Writing the config needs no Lua, so that step
runs everywhere too.
|
|
The fallback through cgit ran only where cgit's own Lua lacked lpeg,
and every machine the suite runs on has it, so the test never ran.
With every Lua search path pointed at an empty directory it runs
anywhere. It now also checks that the readme's markup is escaped, as
its title said, and compares the whole log line.
|
|
|
|
Where a standalone Lua had no lpeg, the harness skipped the markdown
and man checks itself, behind a note the test library hides, and the
test passed on the six checks left. The real luaossl checks were left
out the same way. Each now shows as a skip under a prerequisite named
for the interpreter, and a misspelt mode fails rather than running the
default.
|
|
With no standalone interpreter on the path the unit checks were never
registered, so they counted as neither run nor skipped, and a fault in
the version probe dropped them all behind one line of output. The test
bodies now expand their paths as they run, so a quote in a path no
longer breaks them.
|
|
A plain lua is usually one of the versioned names again, as lua and
lua5.5 are here, so every 5.5 check ran twice, while names such as
lua54 and lua-5.4 were never looked for. A test now names the version
that ran, since "under lua" did not say which one it was.
|
|
The probe piped cgit into grep, so a crash or a sanitizer abort while
probing read as a missing module, and t0501, t0504 and t0505 then
expected the fallback on a machine that has the module.
|
|
As in link-commits, every capture was hex or digits. A string
replacement there would also raise outside the pcall that guards the
pattern and take the whole page down.
|
|
Every capture the checks used was hex or digits, which encoding leaves
alone, so the filter passed with url_encode gone and a broader rule
could then have broken out of the href.
|
|
Every escape the checks looked at sat between tokens or in the tail a
lexer left untagged, so a filter that escaped only those would have
passed with a string literal reaching the page raw.
|
|
One ten second budget covered several inputs, so a failure did not say
which had regressed, and it allowed ten times the second a readme is
held to while leaving a slow host little room. A linear render costs
four times as much at four times the length and a quadratic one
sixteen, whatever the host. The cap on unclosed brackets had no check
at all, and the line of \h' escapes timed nothing that is bounded.
|
|
|
|
The old check split the scheme with a newline, which ends the line
before a link can form, so it passed with the strip removed.
|
|
The icons came from Gravatar or Libravatar with the page's url as the
Referer, so the service learned which repositories and commits each
visitor looked at.
|
|
|
|
|
|
The login posts outside any repository, so the log line names the
repository by the page its signed way back leads to.
|
|
Only HTTPS=on counts, the same test cgit makes before it writes an
https link of its own.
|
|
|
|
The way back was signed part way through the form, so while the secret's
directory did not exist, or a library was missing, cgit's error landed
inside the hidden input and the page broke off there with no fields.
|
|
|
|
Scintillua's detect() matches an extension by its case, and the fallback
e227d1f dropped had lowercased it, so MAIN.C and SETUP.PY lost their
colour. The fake lexer now answers only for the suffixes it knows, as
Scintillua does, which is what lets the check see it.
|
|
On Lua 5.3 and later a length worked out with a fraction, such as
1.5 * 24 * 60 * 60, is a float, so the signed expiry came out as
1793609024.0, which validate_value refuses, and every login failed.
Max-Age took the same .0, which makes a browser ignore it.
|
|
setup.sh already asks the binary, so the seven scripts that each turned
the answer into a prerequisite now share one. test-lib names the missing
prerequisite beside every test it skips, so the notes that cgit lacks
Lua go, while the ones announcing a fallback stay. Every script that
listed the standalone interpreters asked for the same ceiling, so lib.sh
now builds that list for all of them.
|
|
The two identical posts for an unknown user become one, and no two
checks share a name, so a failure report points at a single check.
|
|
|