4512 Commits

Author SHA1 Message Date
Bellman
e9e8fa3847 chore(inventory): refresh merged-main provenance
Rebind inventory after CI lock-bench ceiling update so tag publish verify passes.
v5.1.0
2026-08-31 16:34:56 +09:00
Bellman
44cd2a35e7 test(perf): widen CI lock-bench p50/p95 ceilings
Tag-publish runners observed median p95 ~75ms against the 45ms guard.
Keep local 8ms p99. Unblocks v5.1.0 release job.
2026-08-31 16:24:16 +09:00
Bellman
36bacdf5d5 Merge pull request #3912 from Yeachan-Heo/release/v5.1.0
Owner-authorized merge of v5.1.0 exact head 7fb546d500. Discord 1543579559268581458.
2026-08-31 16:11:56 +09:00
Bellman
c2e3dbd325 ci: authorize owner-signed v5.1.0 release head
Bind PR #3912 generated closure to GitHub-verified successor
7fb546d500 against merge-base
8b6b9f23c1.
2026-08-31 15:53:06 +09:00
Bellman
7fb546d500 ci: owner-sign exact v5.1.0 head
GitHub-verified bind of functional successor 227834203e.
2026-08-31 15:52:22 +09:00
Bellman
427f86ab43 ci: authorize owner-signed v5.1.0 release head
Bind PR #3912 generated closure to GitHub-verified successor
227834203e against merge-base
8b6b9f23c1.
2026-08-31 15:49:18 +09:00
gaebal-gajae
227834203e test(perf): widen CI second-highest p99 lock ceiling
GitHub-hosted runners failed Test at 122ms against the 100ms
second-highest p99 guard; keep median p50/p95 tight.
2026-08-31 06:30:57 +00:00
gaebal-gajae
74ffe7c030 fix(hooks): treat lone bash - as stdin like --
GNU Bash documents - as equivalent to --; with no remaining script
argument, commands are read from standard input.
2026-08-31 06:19:58 +00:00
gaebal-gajae
0117b2f2a2 fix(hooks): keep fd 0 on self-move 0<&0-
Do not delete the modeled descriptor when <&digit- moves a fd onto
itself, so here-strings survive 0<&0-.
2026-08-31 05:59:53 +00:00
gaebal-gajae
146fe26b52 fix(hooks): treat <&digit- as a descriptor move
Recognize the optional trailing dash on duplication targets so 0<&3-
restores a saved pipeline stdin.
2026-08-31 05:51:00 +00:00
gaebal-gajae
855a76b165 fix(hooks): inherit pipeline stdin through fd copies
Initialize fd 0 as the pipeline source so 3<&0 / 0<&3 restores it after
a here-string, and treat dynamic <& targets as unknown.
2026-08-31 05:45:45 +00:00
gaebal-gajae
be3e668ba7 fix(hooks): last-wins here-strings and fd duplication aliases
Track the effective fd-zero here-string across left-to-right redirects
and [n]<&word aliases, including save/restore through another fd.
2026-08-31 05:35:56 +00:00
gaebal-gajae
4964227818 fix(hooks): keep here-strings across 0<&0
Scan the effective here-string before operand checks, and do not treat
fd-zero self-duplication as replacing it.
2026-08-31 05:21:30 +00:00
gaebal-gajae
4edd95f6d4 fix(hooks): signed head counts, /dev/null cat, last-wins here-string
Treat -n+NUM as a transforming count, allow /dev/null as a byte-neutral
cat operand, and scan only the effective fd-zero here-string.
2026-08-31 05:10:58 +00:00
gaebal-gajae
4eee53f45e fix(hooks): transforming head, producer here-strings, suffix-file cat
Warn when head/tail count options feed a shell, scan cat here-strings
as pipeline programs, and reject extra cat file operands as passthrough.
2026-08-31 04:59:10 +00:00
gaebal-gajae
d727152f1c fix(hooks): 0<&0 no-op and prefix-file cat stages
Treat 0<&0 as keeping pipeline stdin, and do not passthrough cat when a
file operand precedes explicit stdin.
2026-08-31 04:46:48 +00:00
gaebal-gajae
5556ff771e fix(hooks): cat stdin redirect vs forwarded - operand
Do not treat cat as pipeline passthrough when fd 0 is redirected, and
keep passthrough if an explicit - stdin operand was already forwarded
before a later missing file.
2026-08-31 04:37:20 +00:00
gaebal-gajae
425a121aa0 fix(hooks): allow cat -u passthrough and one -- delimiter
-u is byte-neutral; a second -- after the option delimiter is a
filename, not stdin.
2026-08-31 04:25:31 +00:00
gaebal-gajae
8dcf697e37 fix(hooks): cat -n is not a stdin passthrough
Only treat cat as transparent when remaining words are -- or the
explicit stdin operand -, not transforming options like -n.
2026-08-31 04:13:08 +00:00
gaebal-gajae
7826315d10 fix(hooks): executing long options and stdin noexec reversal
Accept --noediting/--login/--pretty-print/--debug as executing options,
and track +n reversing -n for stdin programs as well as -c.
2026-08-31 04:11:29 +00:00
gaebal-gajae
fec6262350 fix(hooks): rcfile dash names, noexec reversal, script operand, cat -
Parse bash invocation options before any script operand, accept
dash-prefixed --rcfile paths, let +n clear noexec, and treat cat -- -
as stdin passthrough.
2026-08-31 03:59:20 +00:00
gaebal-gajae
d34cf82f7f fix(hooks): exact builtin names, command unwrap, invalid -O args
Unwrap builtin only for exact printf/echo/command, keep builtin command
rm visible, and abort when -O/-o consume a following option token.
2026-08-31 03:47:27 +00:00
gaebal-gajae
2be0b903f4 fix(hooks): noexec only before -c operand; builtin only printf/echo
Stop treating trailing -n after the -c command as noexec, and unwrap
builtin only for printf/echo rather than all names.
2026-08-31 03:36:48 +00:00
gaebal-gajae
fc836b84df fix(hooks): plus stdin options, builtin producers, noexec
Consume valid +options on stdin shells, unwrap builtin printf/echo
pipeline producers, and skip scans when -n or -o noexec is set.
2026-08-31 03:27:57 +00:00
gaebal-gajae
6563b3a063 fix(hooks): treat bash -c +D as dump-strings, not executed code
+D/-D/--dump-strings after -c dump translation strings and do not run
the following command string.
2026-08-31 03:06:31 +00:00
gaebal-gajae
6b621aa7c9 fix(hooks): literal braces in \${} and plus invocation flags
Only nest parameter expansions on \${, not ordinary braces, and accept
valid +i/+c/+l/+r/+s after bash -c while still rejecting +z.
2026-08-31 02:54:09 +00:00
gaebal-gajae
403a40ca4c fix(hooks): nested \${} in \$() delimiters and valid +options
Balance parameter expansions inside command substitutions used as
heredoc delimiters, and treat unknown +flags after bash -c as invalid
options rather than skipped wrappers.
2026-08-31 02:45:31 +00:00
gaebal-gajae
06b4a48bd9 fix(hooks): echo NUL ignore, +options after -c, \$() delimiters
Strip NULs from reconstructed pipeline programs, consume +x-style
options after bash -c, and keep \$(...) as a literal heredoc delimiter.
2026-08-31 02:34:45 +00:00
gaebal-gajae
6d3f2d5e28 fix(hooks): ANSI-C in backticks, echo \\c stop, short \\u
Track \$'...' when locating command-substitution backticks, stop
echo -e output at \\c, and decode variable-width \\u/\\U in echo -e.
2026-08-31 02:15:58 +00:00
gaebal-gajae
517d5a11a4 fix(hooks): echo -e expansion, escaped backticks, locale heredocs
Expand echo -e escapes before scanning pipeline programs, skip escaped
backticks when closing command substitutions, and treat \$\"EOF\" as
delimiter EOF.
2026-08-31 02:00:45 +00:00
gaebal-gajae
2be8825a20 fix(hooks): here-strings, -c options, quoted heredoc continuations
Keep quoted heredoc body backslash-newlines, inspect bash <<< programs,
skip post -c flags, parse head -n values, stop command -v/-V unwrap,
reject unknown printf options, and preserve over-max \\U text.
2026-08-31 01:52:48 +00:00
gaebal-gajae
d156d251ff fix(hooks): %b doubled backslash and invalid printf Unicode
Decode printf %b \\\\ to one backslash so \\> stays an escaped
redirect, and skip out-of-range \\U code points without aborting
the rest of the command.
2026-08-31 01:09:01 +00:00
gaebal-gajae
83aacc8458 fix(hooks): empty quoted redirect targets are not source writes
Bash fails to open > '' and does not run the following words as a
command, so a quoted empty redirect destination must stay quiet.
2026-08-31 01:01:02 +00:00
gaebal-gajae
037a547407 fix(hooks): keep empty quoted words after ANSI-C NUL truncation
Truncating \$'\\c@...' to empty must still emit the quoted token so
bash -c does not steal the next argument, and cover NUL-truncated
heredoc delimiters.
2026-08-31 00:53:28 +00:00
gaebal-gajae
03bd09814a fix(hooks): truncate ANSI-C words at decoded NUL
Bash C-string arguments stop at NUL, so \$'\\c@' must cut the rest of
the ANSI-C word before classification.
2026-08-31 00:45:05 +00:00
gaebal-gajae
e6865cfac9 fix(hooks): ANSI-C \\cX controls and double-quote backslashes
Decode \$'\\cX' as a control character (so \\cJ is newline) and keep
nonspecial backslashes inside double-quoted words.
2026-08-31 00:35:03 +00:00
gaebal-gajae
621caf7390 fix(hooks): variable-width ANSI-C Unicode and unknown escapes
Accept 1-4 / 1-8 hex digits for \\u/\\U, skip out-of-range code points
without aborting the scan, and keep unrecognized ANSI-C backslashes.
2026-08-31 00:27:15 +00:00
gaebal-gajae
5abd94880f fix(hooks): decode ANSI-C words and heredoc delimiters
Decode \$'...' escapes (including \\xHH) before classifying operands
and pipeline programs, and parse ANSI-C quoted heredoc delimiter words
so <<\$'EOF' terminates on EOF.
2026-08-31 00:19:35 +00:00
gaebal-gajae
d09ac81414 fix(hooks): ANSI-C quotes and unrecognized echo options
Track $'...' separately from ordinary single quotes so escaped
apostrophes do not close groups or fake heredocs, and treat only
-n/-e/-E as echo options so -x remains output data.
2026-08-30 23:54:57 +00:00
gaebal-gajae
e80778934d fix(hooks): echo spaces, echo -- data, single-quoted backslash
Join echo pipeline arguments with spaces, keep echo -- as output data,
and do not treat backslash as an escape inside single quotes when
scanning for heredocs.
2026-08-30 23:36:59 +00:00
gaebal-gajae
24baca4c3a fix(hooks): treat printf -v as producing no stdout
Bash builtin printf -v assigns to a variable and writes nothing on
stdout, so a following stdin shell must stay quiet. Leading IO-number
sed, arithmetic <<, and GNU vs builtin format \\c already reproduce.
2026-08-30 22:38:10 +00:00
gaebal-gajae
59d81eddf0 fix(hooks): escaped IO numbers, stderr close, env printf
Treat escaped digits as command words, keep cat passthrough when only
stderr is closed, and apply GNU format \\c stop through env/exec/sudo
wrappers.
2026-08-30 22:34:47 +00:00
gaebal-gajae
fb670f542e fix(hooks): IO-number quoting, cat stderr, GNU vs builtin printf
Keep nonspecial backslashes in double-quoted heredoc delimiters, strip
only unquoted glued IO numbers on operators that accept them, treat
stderr-only cat redirects as passthrough, apply format \\c stop only
to path-qualified GNU printf, and preserve unknown format backslashes.
2026-08-30 22:24:40 +00:00
gaebal-gajae
8e2ee63a62 fix(hooks): glued IO numbers, cat passthrough, format \\c, heredoc quotes
Require redirect adjacency for IO-number words, treat only unredirected
cat as pipeline passthrough, keep Bash printf format \\c from stopping
output, skip << inside (( )), and parse escaped quotes in delimiters.
2026-08-30 22:16:16 +00:00
gaebal-gajae
fb66d54d31 fix(hooks): IO-number words, mv suffix, dup dest, pipeline passthrough
Exclude leading redirect IO numbers from executables, consume mv
--suffix values, require standalone dest fds for <&, normalize
heredoc/dup coordinates per owner, and follow literal programs
through cat/head/tail passthrough stages.
2026-08-30 21:57:26 +00:00
gaebal-gajae
2694da44d1 fix(hooks): fd0 overrides, delimiter continuation, and %b \\c stop
Join unquoted backslash-newline in heredoc delimiter words, treat later
file/here-string redirects as replacing fd0, and stop remaining printf
output at %b \\c. Older heredoc/sudo/touch cases still reproduce clean.
2026-08-30 21:52:59 +00:00
gaebal-gajae
c882f25329 fix(hooks): allow whitespace in stdin dup source fds
Parse 0<& 3 the same as 0<&3 so a heredoc on fd 3 still becomes
the shell program after duplication onto stdin.
2026-08-30 21:37:31 +00:00
gaebal-gajae
19212feca3 fix(hooks): printf precision/unicode and heredoc stdin transfer
Apply %s/%b precision, decode \\u/\\U format escapes, inspect cat
heredocs piped into shells, and follow 0<&N duplication onto stdin.
2026-08-30 21:34:49 +00:00
gaebal-gajae
31827de40f fix(hooks): parse qualified printf conversions and format escapes
Recognize width/flag/precision %s/%b specs and decode octal/hex
escapes in formats that also contain conversions so pipeline stdin
programs cannot hide behind %1s or %s\012.
2026-08-30 21:18:38 +00:00
gaebal-gajae
ea72dedb42 fix(hooks): expand printf %b octal and hex escapes
Complete %b argument expansion for \0NNN and \xHH so pipeline stdin
programs that hide newlines in octal/hex escapes are still inspected.
2026-08-30 21:05:53 +00:00