aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
...
| * archival/libarchive: sanitize filenames on output (prevent control sequence ↵Denys Vlasenko2025-09-242-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | attacks This fixes CVE-2025-46394 (terminal escape sequence injection) Original credit: Ian.Norton at entrust.com function old new delta header_list 9 15 +6 header_verbose_list 239 244 +5 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/0 up/down: 11/0) Total: 11 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * ash: change procargs() to match recent dash changeDenys Vlasenko2025-09-231-7/+3
| | | | | | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* | ash: allow ctrl-c to interrupt wait in presence of trapRon Yorston2025-10-051-4/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | Commit 387d01161 (ash: allow wait builtin to be interrupted) allowed the wait builtin to be interrupted by ctrl-c. However, this didn't work in the presence of a trap. When waitpid_child() detects an interrupt propagate this up the call stack so the wait builtin terminates and the trap is invoked. Adds 80-88 bytes. (GitHub issue #530)
* | ash: make ctrl-c trap handling closer to upstreamRon Yorston2025-10-051-12/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | Commit 64c8f5f3d0 (ash: add support for INT trap) didn't follow upstream behaviour. If a trap is supplied for SIGINT, upstream's signal handler detects this and doesn't call raise_interrupt(). The busybox-w32 implementation called raise_interrupt() but had it do nothing. Modify the code to match upstream's behaviour. Saves 16-36 bytes.
* | ash: allow wait builtin to be interruptedRon Yorston2025-10-031-11/+12
| | | | | | | | | | | | | | | | | | | | | | | | After commit f6be217fa (ash: wait builtin should block) it wasn't possible to interrupt a call to wait with Ctrl-C. A blocking wait should be stopped from time to time to check for an interrupt. Adds 32 bytes. (GitHub issue #529)
* | ash: wait builtin should blockRon Yorston2025-10-021-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It was found that the 'wait' shell builtin would use 100% of a core when waiting for a process to terminate: sleep 60 & wait This is a regression caused by commit bb8f6b688 (ash: fix slow running when background job is present). See the commit message and GitHub issue #434 for the long and involved history. The problem is in the Windows implementation of waitproc() in ash. The 'block' argument to waitproc() can take three values: DOWAIT_NONBLOCK DOWAIT_BLOCK DOWAIT_CHILD_OR_SIG The first two have obvious meanings. The third performs a non- blocking wait(2) and if no PID is returned it waits for SIGCHLD. So in effect it's a blocking wait. The Windows implementation would perform a non-blocking wait(2) but couldn't then wait for SIGCHLD, because Windows doesn't have such a signal. As a result the 'wait' builtin would loop calling waitproc(). To avoid this DOWAIT_CHILD_OR_SIG should be treated as a blocking wait in waitproc(). (GitHub issue #529)
* | Further mingw-w64/gcc build tweaksRon Yorston2025-10-022-1/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Commit 6481bb22b (win32: use 64-bit time on 32-bit platforms) fails to build with mingw32-gcc prior to mingw-w64 10.0.0. Don't used 64-bit time for such builds. mingw-w64 7.0.0 and below don't have some definitions required for native TLS support. This is enabled by default in the 64-bit Unicode build. Add the definitions required for the default build. TLS 1.3 support needs more but isn't enabled by default. (GitHub issue #527)
* | Allow building with older mingw-w64/gccRon Yorston2025-10-013-2/+7
| | | | | | | | | | | | | | | | | | Recent versions of busybox-w32 rely on features which are only available in contemporary versions of mingw-w64 and gcc. Allow building on somewhat older toolchains. (GitHub issue #527)
* | win32: use correct errno for fopen() of directoryRon Yorston2025-09-191-1/+6
| | | | | | | | | | | | | | | | | | | | We already fixed up errno when a directory was opened by open(). Do the same for fopen(). This allows grep to give a more useful error message when it's asked to open a directory. Adds 64 bytes. (GitHub issue #521)
* | vi: warn about range in ':!' commandRon Yorston2025-09-191-0/+6
| | | | | | | | | | | | | | | | | | | | | | | | Currently vi in Busybox doesn't support filtering text through an external command with ':1,2!cmd'. Instead it behaves as if no range had been supplied and displays the output of the command. Issue a warning and do nothing in such cases. Adds 32 bytes. (GitHub issue #524)
* | ls: restore functionality of --colorRon Yorston2025-09-161-1/+2
| | | | | | | | | | | | | | | | | | | | | | Since upstream commit 551bfdb97 (ls: implement -q, fix -w0, reduce startup time) was merged the '--color' option behaves as though the default argument 'always' had been specified. This is due to an explict short option for '--color' being given, but without specifying that an argument is expected. (GitHub issue #522)
* | Merge branch 'busybox' into mergeRon Yorston2025-09-114-35/+139
|\|
| * hush: changes to comments and whitespace, no code changesDenys Vlasenko2025-09-031-8/+8
| | | | | | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * ash: implement <<<here_string syntaxDenys Vlasenko2025-09-023-26/+129
| | | | | | | | | | | | | | | | | | | | | | | | | | | | function old new delta write2pipe - 133 +133 .rodata 105992 106009 +17 readtoken1 3101 3111 +10 cmdtxt 631 641 +10 nodesize 27 28 +1 redirect 961 916 -45 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 4/1 up/down: 171/-45) Total: 126 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* | Merge branch 'busybox' into mergeRon Yorston2025-09-1157-738/+1545
|\|
| * hush: fix several syntax corner cases with function definitionsDenys Vlasenko2025-08-189-2/+37
| | | | | | | | | | | | | | | | | | | | function old new delta parse_stream 3063 3075 +12 done_word 777 784 +7 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/0 up/down: 19/0) Total: 19 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * hush: shrink "function" codeDenys Vlasenko2025-08-181-11/+11
| | | | | | | | | | | | | | | | | | | | | | function old new delta done_word 766 777 +11 static.reserved_match 16 12 -4 reserved_list 240 168 -72 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/2 up/down: 11/-76) Total: -65 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * hush: do not SEGV on if { echo foo; } then { echo bar; } fiDenys Vlasenko2025-08-181-5/+4
| | | | | | | | | | | | | | | | | | | | | | | | For some reason, it was only happening in interactive use function old new delta initialize_context 39 54 +15 parse_stream 3077 3063 -14 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/1 up/down: 15/-14) Total: 1 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * hush: disentangle keyword detection, no logic changesDenys Vlasenko2025-08-181-25/+27
| | | | | | | | | | | | | | function old new delta done_word 790 766 -24 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * hush: make "function" keyword support optionalDenys Vlasenko2025-08-171-11/+22
| | | | | | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * hush: with --login, errors /etc/profile in must not exit shellDenys Vlasenko2025-08-171-3/+8
| | | | | | | | | | | | | | | | | | | | | | function old new delta die_if_script 28 34 +6 hush_main 1146 1150 +4 run_list 1031 1028 -3 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/1 up/down: 10/-3) Total: 7 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * hush: recognize "function FUNC { cmd; }" syntaxDenys Vlasenko2025-08-171-43/+103
| | | | | | | | | | | | | | | | | | | | | | | | | | | | function old new delta reserved_list - 240 +240 parse_stream 2923 3077 +154 done_word 771 790 +19 .rodata 105975 105992 +17 static.reserved_match 12 16 +4 static.reserved_list 168 - -168 ------------------------------------------------------------------------------ (add/remove: 1/1 grow/shrink: 4/0 up/down: 434/-168) Total: 266 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * hush: remove always-true conditionalDenys Vlasenko2025-08-171-1/+0
| | | | | | | | | | | | | | function old new delta parse_stream 2940 2923 -17 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * hush: fix infinite loop expanding alias a="nice&&a"Denys Vlasenko2025-08-171-6/+45
| | | | | | | | | | | | | | | | | | | | | | function old new delta parse_stream 2857 2940 +83 i_peek 55 69 +14 i_free_alias_buffer 33 37 +4 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 3/0 up/down: 101/0) Total: 101 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * hush: comment fixesDenys Vlasenko2025-08-171-2/+1
| | | | | | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * hush: make "alias" print aliases in properly escaped formDenys Vlasenko2025-08-171-31/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | function old new delta print_pfx_escaped_nl - 83 +83 builtin_alias 216 218 +2 .rodata 105985 105975 -10 parse_stream 2873 2857 -16 builtin_set 301 259 -42 builtin_readonly 107 59 -48 builtin_export 145 93 -52 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 1/5 up/down: 85/-168) Total: -83 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * hush: fix nested alias expansionDenys Vlasenko2025-08-171-5/+10
| | | | | | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * hush: optional alias supportDenys Vlasenko2025-08-171-44/+388
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | function old new delta parse_stream 2540 2873 +333 i_getch 85 410 +325 builtin_alias - 216 +216 builtin_unalias - 185 +185 .rodata 105806 105985 +179 word_matches_alias - 82 +82 find_alias_slot - 77 +77 end_of_alias_name - 69 +69 builtin_type 128 179 +51 i_free_alias_buffer - 33 +33 enable_all_aliases - 29 +29 bltins1 396 420 +24 o_reset_to_empty_unquoted - 21 +21 run_pipe 1554 1566 +12 i_peek 57 55 -2 parse_redirect 351 346 -5 redirect_opt_num 63 53 -10 encode_then_append_var_plusminus 552 532 -20 done_word 796 771 -25 i_getch_interactive 308 - -308 ------------------------------------------------------------------------------ (add/remove: 8/1 grow/shrink: 6/5 up/down: 1636/-370) Total: 1266 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * hush: optimization in set_local_var()Denys Vlasenko2025-08-161-6/+6
| | | | | | | | | | | | | | function old new delta set_local_var 416 409 -7 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * hush: implement <<<here_string syntaxDenys Vlasenko2025-08-153-41/+137
| | | | | | | | | | | | | | | | | | | | | | | | | | function old new delta setup_heredoc 299 351 +52 parse_stream 2514 2540 +26 parse_redirect 335 351 +16 redir_table 40 48 +8 static.setup_redirects 394 400 +6 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 5/0 up/down: 108/0) Total: 108 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * hush: allow faster parsing for "./:@" charactersDenys Vlasenko2025-08-141-2/+7
| | | | | | | | | | | | | | function old new delta parse_stream 2513 2514 +1 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * hush: shrink syntax error handlingDenys Vlasenko2025-08-141-28/+52
| | | | | | | | | | | | | | | | | | | | | | | | | | Was trying to add code to reject more invalid "case" syntaxes, but it's not that easy function old new delta done_word 795 796 +1 parse_stream 2529 2513 -16 .rodata 105825 105806 -19 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/2 up/down: 1/-35) Total: -34 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * hush: undo incorrect change which allows a'b'=c to be assignmentDenys Vlasenko2025-08-145-22/+20
| | | | | | | | | | | | While at it, remove now-unused WORD_IS_KEYWORD Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * hush: explain "empty quoted str marker" trickDenys Vlasenko2025-08-141-5/+11
| | | | | | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * hush: improve code readability, no logic changesDenys Vlasenko2025-08-141-22/+25
| | | | | | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * hush: move tickquote1.tests to hush-bugs/ - it's a known bugDenys Vlasenko2025-08-142-0/+0
| | | | | | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * hush: remove the is_blank danceDenys Vlasenko2025-08-145-76/+75
| | | | | | | | | | | | | | function old new delta parse_stream 2566 2524 -42 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * hush: remove two strchr's from the hottest parsing loopDenys Vlasenko2025-08-141-88/+85
| | | | | | | | | | | | | | function old new delta parse_stream 2572 2566 -6 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * hush: optimize decoding of $'str' - avoid extra function call if we canDenys Vlasenko2025-08-131-5/+4
| | | | | | | | | | | | | | function old new delta parse_stream 2565 2572 +7 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * hush: shrink i_getch, rename two functionsDenys Vlasenko2025-08-131-28/+23
| | | | | | | | | | | | | | | | | | | | | | | | Final link with: <none> function old new delta i_getch_interactive - 308 +308 i_getch 102 85 -17 fgetc_interactive 309 - -309 ------------------------------------------------------------------------------ (add/remove: 1/1 grow/shrink: 0/1 up/down: 308/-326) Total: -18 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * hush: ~5% faster parsing of typical shell scriptsDenys Vlasenko2025-08-131-13/+19
| | | | | | | | | | | | | | | | | | 0-9,A-Z,a-z are never special and just go into the current word. function old new delta parse_stream 2476 2565 +89 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * hush: create a macro IS_NULL_WORD to test for null shell wordDenys Vlasenko2025-08-131-16/+14
| | | | | | | | | | | | No logic changes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * hush: fix a corner case in "case" stmt, ctx_dsemicolon is in fact unusedDenys Vlasenko2025-08-135-53/+55
| | | | | | | | | | | | | | | | | | | | function old new delta parse_stream 2446 2476 +30 done_word 797 800 +3 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/0 up/down: 33/0) Total: 33 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * hush: allow nested negation "! ! ! CMD" - bash 5.2.15 allows itDenys Vlasenko2025-08-123-73/+71
| | | | | | | | | | | | | | | | | | | | | | | | Also, deindent "ch == EOF" code branch in parse_stream() function old new delta done_word 799 797 -2 parse_stream 2453 2446 -7 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-9) Total: -9 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * hush: drop ctx_inverted, use pipe->pi_invertedDenys Vlasenko2025-08-122-20/+25
| | | | | | | | | | | | | | | | | | | | | | | | function old new delta done_word 776 799 +23 parse_stream 2456 2453 -3 done_pipe 252 242 -10 .rodata 105837 105825 -12 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/3 up/down: 23/-25) Total: -2 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * hush: do not segfault on "for </dev/null v in..."Denys Vlasenko2025-08-123-113/+124
| | | | | | | | | | | | | | This is not accepted by bash, we may also disallow this, but for now, at least do not crash Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * hush: test for, and disallow several invalid syntaxesDenys Vlasenko2025-08-1121-25/+96
| | | | | | | | | | | | | | | | | | | | function old new delta parse_stream 2292 2456 +164 done_pipe 231 252 +21 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/0 up/down: 185/0) Total: 185 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * ash: parser: Invalid redirections are run-time, not syntax errorsDenys Vlasenko2025-08-111-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Upstream commit Date: Wed, 14 Dec 2022 02:06:05 +0100 parser: Invalid redirections are run-time, not syntax errors This fixes a long-standing bug where echo 'echo >&a' | sh errors out with sh: 2: Syntax error: Bad fd number despite the error being on line 1 This patch makes the error sh: 1: Bad fd number: a as expected Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * hush: fix var_backslash1.testsDenys Vlasenko2025-08-115-68/+138
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | function old new delta o_addqblock - 131 +131 append_str_maybe_ifs_split 53 100 +47 expand_one_var 1872 1897 +25 encode_then_expand_vararg 380 399 +19 sig_unblock 41 43 +2 sig_block 41 40 -1 sigprocmask_allsigs 33 31 -2 expand_vars_to_list 1080 1077 -3 wait_for_child_or_signal 202 193 -9 o_addQstr 175 42 -133 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 4/5 up/down: 224/-148) Total: 76 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * shells: testcase: add another test for EINTR on fifo openDenys Vlasenko2025-08-114-0/+32
| | | | | | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>