1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2024-06-01 04:46:08 +02:00
Commit Graph

439 Commits

Author SHA1 Message Date
Stephane Chazelas b3cad1c24c 52515: (+ tests in 52527) avoid sh errors when running shebang-less scripts with paths starting with - or + 2024-02-18 18:22:37 +00:00
Bart Schaefer fcf080ab57 52313: Src/exec.c: multios are not interactive and check for write errors. 2023-11-18 16:22:24 -08:00
Bart Schaefer ddfc81a2b8 52309: fix cases that hang with all signals blocked.
* no job control inside <<(substition)
* allow interrupt of multios reading from a terminal
2023-11-15 20:29:50 -08:00
ErrrorMaxx 0c15cc8712 github #104: fix small typo 2023-10-24 20:42:46 -05:00
Bart Schaefer 96ce0abf6b 52125: getoutput() must not free() after gettempname(..., 1) for heap 2023-09-10 21:00:23 -07:00
Peter Stephenson 8f5fe841a6 51652: fix running of TRAPEXIT explicitly.
This is a special case where TRAPEXIT is unset within a TRAPEXIT
as it should never run in a nested context, so just save the
function structure temporarily on the heap.
2023-04-17 09:30:34 +01:00
Jun-ichi Takimoto 98b4d4bdca 51632: nmetafy $_ when exporting it to child 2023-04-09 20:33:32 +09:00
Peter Stephenson 12e5db145b 51608: Don't execute commands after "continue &&"
Also ! continue ||
2023-03-29 10:52:05 +01:00
Peter Stephenson 7e0c4406ce 51424: $(<...) shouldn't try to open a file with NO_EXEC 2023-02-14 09:21:32 +00:00
Oliver Kiddle a73c705b0c 51212: remove STOUC() macro
This served as a workaround for ancient compilers where casts to
unsigned char were broken.
2022-12-16 23:28:10 +01:00
Bart Schaefer 6d49734d46 51210: Clear errflag before calling EXIT trap
If this is not done, special cases such as failures in special builtins
or errors in math expressions skip the trap execution.
2022-12-13 21:11:33 -08:00
Peter Stephenson 67d4bf5bb9 51134: ! return doesn't change the return status 2022-12-12 10:30:13 +00:00
Bart Schaefer 2028539cb1 51161: correct errno after closing xtrace FD 2022-12-09 19:30:35 -08:00
Philippe Altherr 8086f10615 51094: consistent use of bit-manipulation for noerrexit value changes 2022-12-03 21:46:42 -08:00
Philippe Altherr ab9c579ef9 51098: remove unreachable NOERREXIT_UNTIL_EXEC code and effects 2022-12-03 21:35:51 -08:00
Philippe Altherr f253ea6b9d 51076: fix ERR_EXIT when used with "eval" or "source"; documentary comments 2022-12-03 21:14:26 -08:00
Philippe Altherr 259f1e944b 51071: fix ERR_RETURN for functions in conditional statements 2022-12-03 21:03:36 -08:00
Philippe Altherr dd3ba3d599 51001: fix for ERR_EXIT following shell function; update tests 2022-12-03 20:44:10 -08:00
Philippe Altherr d47b8480f0 51001: fix for ERR_EXIT with pipeline negation ("!"); update tests 2022-12-03 20:42:13 -08:00
Philippe Altherr 23dc19f005 51001: Reverts 8839e969b, most of 1ba8714a, and d873ed60.
Also correct ChangeLog
2022-12-03 20:31:42 -08:00
Bart Schaefer 8839e969bf 50929: fix handling of ERR_RETURN bent by 50928. 2022-11-09 21:48:46 -08:00
Bart Schaefer 1ba8714a7a 50928: fix tests for 50897, mention behavior change in NEWS 2022-11-09 21:37:56 -08:00
Bart Schaefer 61610ea4bd 50922: fix additional cases of signals for current shell jobs on the right of a pipeline.
Backs out part of 188c5cd5 (workers/50874).  With this change, after a
new subshell is forked upon suspend of the right side of a pipeline, the
previous foreground subjob is resumed first and the new subshell remains
stopped until that job finishes.
2022-11-09 20:24:57 -08:00
Bart Schaefer d873ed6026 50897: nonzero status of complex commands should trigger ERR_EXIT 2022-11-08 20:36:49 -08:00
Jun-ichi Takimoto f8d93888a8 50851: restore typtab when necessary
inittyptab() must be called when returning from a function with
"setopt localoptions MULTIBYTE|BANGHIST|SHSTDIN", and also in
function dosetopt() when setting these options (via $options, for
example). We intentionally did not take account of the options
EMACS/VI because these options are obsolete and their use is
not recommended.
2022-11-02 16:27:27 +09:00
Bart Schaefer 8181708feb 50136: Fix =(nosuchcommand) race/deadlock first reported in workers/42609 2022-04-29 20:37:09 -07:00
Bart Schaefer 0ccc3c1494 50162: Fix multios with current-shell "exec" (aka nullexec). 2022-04-28 17:03:31 -07:00
Peter Stephenson c5a891a29d 50049: care with signed characters
Some signed-to-unsigned casts needed for a couple of cases of pointers
used as indices.
2022-04-25 17:51:59 +01:00
Peter Stephenson 98e4634086 49906 (Bart), 49911: Fixes to querying jobs in subshell.
Don't attempt to query invalid job off end of table, resulting in
crashes from $jobtstates.

If background task started in subshell, look at tatsks within subshell
instead of main shell.  Document and add test.
2022-03-30 09:28:43 +01:00
Mikael Magnusson d7b8619396 49813: <<<: Document newline behavior and fix optimization
The =(<<<foo) optimization forgot to add a newline, but =(cat<<<foo)
always did, make the behavior consistent, and document it.
2022-03-30 08:07:39 +02:00
Mikael Magnusson 8bf0f0cf45 49694 + doc: Allow using empty STTY= to freeze tty for a single command
Previously, doing this would just run stty with no arguments, which
normally causes it to print some terminal settings to stdout.
2022-01-30 18:14:54 +01:00
Dimitris Apostolou 356dcb20ce github #82: Fix typos 2021-11-12 23:54:34 +01:00
Peter Stephenson db46c9cd58 49353: Fix comments in sourced file.
If the file was sourced from an interactive shell with
INTERACTIVE_COMMENTS not set, comments were not parsed.

Note there is a remaining edge case where the sourced
file is in fact entered at the comment line.
2021-09-09 20:05:39 +01:00
Peter Stephenson 0a80579ed1 49307 with doc update: POSIX_TRAPS fix.
With POSIX_TRAPS set, an ignored signal stays ignored when entering
a subshell.
2021-08-26 09:46:39 +01:00
Bart Schaefer cf5c4828d1 48857: declare "volatile" all globals that may be modified by signal handlers 2021-05-16 19:51:11 -07:00
brian m. carlson f7a417388c 47794: exec: run final pipeline command in a subshell in sh mode
zsh typically runs the final command in a pipeline in the main shell
instead of a subshell.  However, POSIX specifies that all commands in a
pipeline run in a subshell, but permits zsh's behavior as an extension.
The default /bin/sh implementations on various Linux distros and the
BSDs always use a subshell for all components of a pipeline.

Since zsh may be used as /bin/sh in some cases (such as macOS Catalina),
it makes sense to have the common sh behavior when emulating sh, so do
that by checking for being the final item of a multi-item pipeline and
creating a subshell in that case.

From the comment above execpline(), we know the following:

 last1 is a flag that this command is the last command in a shell that
 is about to exit, so we can exec instead of forking.  It gets passed
 all the way down to execcmd() which actually makes the decision.  A 0
 is always passed if the command is not the last in the pipeline. […]
 If last1 is zero but the command is at the end of a pipeline, we pass
 2 down to execcmd().

So there are three cases to consider in this code:

• last1 is 0, which means we are not at the end of a pipeline, in which
 case we should not change behavior.
• last1 is 1, which means we are effectively running in a subshell,
 because nothing that happens due to the exec is going to affect the
 actual shell, since it will have been replaced.  So there is nothing
 to do here.
• last1 is 2, which means our command is at the end of the pipeline, so
 in sh mode we should create a subshell by forking.

input is nonzero if the input to this process is a pipe that we've
opened.  At the end of a multi-stage pipeline, it will necessarily be
nonzero.

Note that several of the tests may appear bizarre, since most developers
do not place useless variable assignments directly at the end of a
pipeline.  However, as the function tests demonstrate, there are cases
where assignments may occur when a shell function is used at the end of
a command.  The remaining assignment tests simply test additional cases,
such as the use of local, that would otherwise be untested.
2021-04-10 17:56:39 -05:00
Justine Tunney 326d9c203b Allow more scripts without #!
This change modifies the zsh binary safety check surrounding execve() so
it can run shell scripts having concatenated binary content. We're using
the same safety check as FreeBSD /bin/sh [1]. POSIX was recently revised
to require this behavior:

    "The input file may be of any type, but the initial portion of the
     file intended to be parsed according to the shell grammar (XREF to
     XSH 2.10.2 Shell Grammar Rules) shall consist of characters and
     shall not contain the NUL character. The shell shall not enforce
     any line length limits."

    "Earlier versions of this standard required that input files to the
     shell be text files except that line lengths were unlimited.
     However, that was overly restrictive in relation to the fact that
     shells can parse a script without a trailing newline, and in
     relation to a common practice of concatenating a shell script
     ending with an 'exit' or 'exec $command' with a binary data payload
     to form a single-file self-extracting archive." [2] [3]

One example use case of such scripts, is the Cosmopolitan C Library [4]
which configuse the GNU Linker to output a polyglot shell+binary format
that runs on Linux / Mac / Windows / FreeBSD / OpenBSD.

[1] 9a1cd36331
[2] http://austingroupbugs.net/view.php?id=1250
[3] http://austingroupbugs.net/view.php?id=1226#c4394
[4] https://justine.lol/cosmopolitan/index.html
2021-02-16 09:16:20 +00:00
Roman Perepelitsa 41e318727e 46268: suppress a useless compiler warning around nice()
From nice(2):

    To detect an error, set errno to 0 before the call, and check
    whether it is nonzero after nice() returns -1.
2020-07-28 11:46:14 +02:00
Daniel Shahaf cf134c15a0 46175/0003: Fix the RM_STAR_SILENT bug from the parent commit. 2020-07-05 11:11:59 +00:00
Peter Stephenson 3df604a4be 46026: Add CLOBBER_EMPTY option. 2020-06-09 18:07:01 +01:00
Peter Stephenson d7e90f1c7c users/24909: Don't clean up special file list too early.
When running a function, remove special files used for substitution
after the function has run rather than before.
2020-06-08 20:52:53 +01:00
Daniel Shahaf fb1aa3fe1e 45923 (with memory leak fixed, cf. 45924): zprof: Don't tally all anonymous functions as though they were a single function named "(anon)".
Before:

    % zmodload zsh/zprof
    % () :
    % () :
    % zprof
    num  calls                time                       self            name
    -----------------------------------------------------------------------------------
     1)    2           0.08     0.04  100.00%      0.08     0.04  100.00%  (anon)

After:

    % zmodload zsh/zprof
    % () :
    % () :
    % zprof
    num  calls                time                       self            name
    -----------------------------------------------------------------------------------
     1)    1           0.04     0.04   50.45%      0.04     0.04   50.45%  (anon) [:3]
     2)    1           0.04     0.04   49.55%      0.04     0.04   49.55%  (anon) [:2]
2020-05-28 19:40:40 +00:00
Daniel Shahaf 386d9ac8ff 45583/0008: Add the 'function -T' syntax.
Config/version.mk was bumped in the previous commit.
2020-03-22 02:23:53 +00:00
Daniel Shahaf a3c6c5513d 45583/0007: WC_FUNCDEF: Add a placeholder element. 2020-03-22 02:23:53 +00:00
Daniel Shahaf e94e828efd 45583/0001: internal: Remove a redundant assignment.
The value is overwritten five lines below, without being read in the interim.
2020-03-22 02:23:52 +00:00
Daniel Shahaf 6fc8e8628f Merge remote-tracking branch 'origin/master' into 5.9
* Test/D02glob.ztst:
  On the "unreadable directories can be globbed (users/24619, users/24626)"
  test, resolve conflicts by removing the Cygwin-only skip that has been added
  in master, since the test is passing on this branch.  This effectively reverts
  workers/45492.  See discussion starting in workers/45504.

* origin/master:
  unposted: Remove 'sgi', as that OpenBSD port has been discontinued.
  45509: fix typos in B01cd.ztst
  45490 (+45495 and a test): refactor rlimits.c
  github #49: Fix typo: longson should be loongson
  users/24710: Fix job control problem with sudo.
  45492: skip test added by users/24633 on Cygwin
  45488: COMP_WORDS for bash need "$@"-style quoting
  45487: Missing mod_export declarations for AIX
  45447: Complete vcs_info_hookadd and vcs_info_hookdel. Expose _vcs_info_hooks as a top-level helper function.
  45463: test: kill: Document why we use SIGURG
  45453: builtins: kill: Do not signal current process group when pid is empty
  45452: builtins: kill: Add `kill ''` regression test with explicit sigspec
  45451: builtins: kill: Add basic test suite
  github #48/0002: vcs_info git: properly detect bare repositories
  github #48/0001: vcs_info git: avoid warnings in bare repositories
  unposted: Post-release version bump
  unposted: Release 5.8
  CVE-2019-20044: Update change log for preceding commits
  Update NEWS/README
  Add unsetopt/PRIVILEGED tests
  Clean up error-message white space
  Improve PRIVILEGED fixes (again)
  Improve PRIVILEGED fixes
  Drop privileges securely
  unposted: V01zmodload: Fix failing test from workers/45385
  45423: _su: Improve arg handling, shell look-ups
  unposted: _zip: Recognise '--'
  45385: Add a test for 'zmodload -Fa' preemptively disabling ("blacklisting"?) features.
  unposted: Test release: 5.7.1-test-3
  zsh/system: Fix infinite loop in sysread
  _diff_options: Restore -w completion lost in workers/43351
  unposted: Fix ChangeLog typo.
  45368: Add tests for workers/45367's issue about double slashes in 'cd -P' and /home/daniel/in/zsh.
  45373: Fix ERR_EXIT bug in else branch of if.
  45372: Record a symlink loop bug involving :P
  45365: _git: Fix __git_recent_branches for the case when a commit has an empty message
  45343: Queue signals around arithmetic evaluations
  45344: Document where third-party completion functions should be installed.
  45345: internal: ztst.vim: Fix highlighting of zsh comments in test payload
  unposted: internal: Add some comments and fix indentation.  No functional change.
  45340: internal: Document the difference between paramtab and realparamtab.
  45332: _git: add completion for git-version
  _brace_parameter: add missing \

Conflicts:
	ChangeLog
	Test/D02glob.ztst
	Test/V01zmodload.ztst
2020-03-07 21:36:46 +00:00
Peter Stephenson 14ea665a90 users/24710: Fix job control problem with sudo.
If we use kill to test for continued existence of a process group,
we should check on failure that the error is ESRCH, as EPERM
indicates the group still has memebers but running privileged
so should be left alone.
2020-02-27 20:42:16 +00:00
Daniel Shahaf 581585dfc6 45343: Queue signals around arithmetic evaluations
The queueing added in execarith() in 45083 is reverted since the callee
does this now.
2020-01-29 09:02:49 +00:00
Daniel Shahaf ca6f4466e6 45131: Make a function that redefines itself preserve its tracedness.
This makes it easy to apply local tracing ('functions -T') to autoloadable
functions that redefines themselves when first loaded.
2019-12-26 04:20:10 +00:00
Peter Stephenson fd068221b7 45083: Add signal protection to execarith().
Otherwise we could get re-entrancy in memory functions when
setting variables.
2019-12-18 10:51:59 +00:00