about summary refs log tree commit diff
path: root/Src
Commit message (Collapse)AuthorAgeFilesLines
* 45453: builtins: kill: Do not signal current process group when pid is emptyChris Down2020-02-181-2/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The following case was encountered in the wild: % zsh; echo "$?" % trap 'exit 5' TERM % kill '' 5 This behaviour seems more likely to be the result of bugs in programs (e.g. `kill -9 "$unsetvar") rather than being desirable behaviour to me. It also seems unintentional judging by the code and documentation, since it comes about as a result of the fact that: - `isanum` returns true for empty strings (since an empty string technically only consists of digits and minuses...); - `atoi`, when passed a pointer to an invalid number, returns 0; - `kill(0, signal)` sends the signal in question to all processes in the current process group. There are (at least) two ways to solve this issue: 1. Add special handling to `kill` to avoid this case. See this patch[0] for a version that does that. 2. Change how isanum behaves. Since the only two call sites that use it both seem like they should handle the case where the input char array is empty, that seems like a reasonable overall change to me.[1] After this patch: % trap 'exit 5' TERM % kill '' kill: illegal pid: The regression test for `kill` without a sigspec is also included in this commit, as previously it's not possible to test it trivially as it would still kill the test runner in expected-to-fail mode; see discussion in workers/45449. 0: workers/45426: https://www.zsh.org/mla/workers/2020/msg00251.html 1: The other call site using isanum() is the fg builtin, but in that case we just fail later since we can't find any job named '', so no big deal either way. It's the kill case which is more concerning.
* Clean up error-message white spacedana2020-02-141-9/+21
|
* Improve PRIVILEGED fixes (again)dana2020-02-141-49/+43
| | | | | | | | * Pass RGID instead of passwd GID to initgroups() * Clean up #ifdefs, avoid unnecessary checks * Flatten conditions
* Improve PRIVILEGED fixesDaniel Shahaf2020-02-144-99/+275
| | | | | | | | | | | | | | | | | | | | | | | | - Fix retval handling in bin_setopt() - Don't skip_setuid / skip_setgid. It's not our place to optimize away noops (that might not even _be_ noops; they might change the saved uid…). - Remove HAVE_* guard checks around functions that are used unguarded elsewhere. - Use bsd-setres_id.c from OpenSSH to provide setresuid() / setresgid() everywhere, and thus simplify the ifdef soup. Fix some preëxisting bugs in the macro definitions of setuid() (do we still need that one?). - Fix zwarning() format codes for variadic arguments type safety - Restored a comment from HEAD - Fix failure modes around initgroups() - Compared privilege restoration code with OpenSSH's permanently_drop_uid() and updated as needed - Add E01 PRIVILEGED sanity checks
* Drop privileges securelySam Foxman2020-02-141-40/+121
|
* zsh/system: Fix infinite loop in sysreadRoman Perepelitsa2020-02-061-1/+1
|
* 45373: Fix ERR_EXIT bug in else branch of if.Peter Stephenson2020-02-021-1/+1
| | | | | The flags need resetting for this branch otherwise e.g. command substitution with non-zero status doesn't cause exit.
* 45343: Queue signals around arithmetic evaluationsDaniel Shahaf2020-01-292-7/+11
| | | | | The queueing added in execarith() in 45083 is reverted since the callee does this now.
* unposted: internal: Add some comments and fix indentation. No functional ↵Daniel Shahaf2020-01-261-2/+13
| | | | change.
* 45340: internal: Document the difference between paramtab and realparamtab.Daniel Shahaf2020-01-231-1/+7
|
* 45302: bin_umask(): Queue signals around umask().Daniel Shahaf2020-01-151-1/+4
| | | | | Otherwise, a signal handler might create files while the temporary umask is in effect.
* Fix typos reported by codespell in Src/Mikael Magnusson2020-01-094-4/+4
|
* 45269: Fix misspellings in completions and elsewhere.Jens Schleusener2020-01-0915-17/+17
|
* 45181: Fix workers/45164: ${(S)%%} will now consider the empty string as a ↵Daniel Shahaf2020-01-021-2/+2
| | | | potential match.
* 24581: Fix array assignments in shell word splitting and completion.Peter Stephenson2019-12-312-1/+13
| | | | | | Assignments after the first were not recognised as such as without the full parser the state didn't return to command position. Fix this in bufferwords() and the completion miniparser.
* unposted: zerrmsg(): Fix macro guard missed in previous commitdana2019-12-261-2/+0
|
* internal: Allow %L in zerrmsg() in non-debug builds, too.Daniel Shahaf2019-12-261-2/+0
| | | | This will let error messages include long integers.
* 45083: Add signal protection to execarith().Peter Stephenson2019-12-181-0/+3
| | | | | Otherwise we could get re-entrancy in memory functions when setting variables.
* 45076: internal: Simplify handling of try_tryflag. No functional change.Daniel Shahaf2019-12-181-6/+3
| | | | | try_tryflag isn't assigned anywhere, other than at initialization and by these lines, so we don't need to save and restore the value.
* 45066: internal: Document forklevel, locallevel, and exit_pending.Daniel Shahaf2019-12-183-2/+14
|
* 45065: Make 'make -s' print nothing when it does nothing.Daniel Shahaf2019-12-181-1/+0
|
* 45064: Fix the mktemp() warning, in debug builds only.Daniel Shahaf2019-12-181-0/+25
| | | | | | | | | | | | On Linux, linking to mktemp() generates the following warning: . utils.o: In function `gettempname': ./Src/utils.c:2229: warning: the use of `mktemp' is dangerous, better use `mkstemp' or `mkdtemp' The warning cannot be disabled. Work around that by using mkstemp() instead, and massage its output so it behaves like mktemp(). See the new comment for further details.
* 45058: internal: Add symbolic names to possible values of zexit()'s ↵Daniel Shahaf2019-12-178-25/+35
| | | | "from_where" parameter. No functional change.
* unposted: Update comment to reflect variable rename in 41012 (= ↵Daniel Shahaf2019-12-171-1/+1
| | | | zsh-5.3.1-182-gd7110d8f0).
* 45025: fix re-entrancy problem with memory management in readoutput().Peter Stephenson2019-12-151-25/+36
| | | | This could cause a signal received during $(...) to corrupt memory.
* 45009: POSIX_CD needs to suppress some forms of option.Peter Stephenson2019-12-121-1/+1
| | | | | Otherwise forms of argument allowed by POSIX are interpreted as options instead.
* 45001: Fix zero-length matches with ${...%...}Peter Stephenson2019-12-121-0/+6
| | | | As the shortest match is preferred, zero-length matches beat any other.
* 45004: Fix typos in commentsMartijn Dekker2019-12-1120-47/+47
|
* 44997: GLOB_COMPLETE fix for compctl file completion.Peter Stephenson2019-12-101-1/+21
| | | | Dashes could cause problems in directory prefixes.
* 44976: fixup describe-key-briefly for visual modeOliver Kiddle2019-12-041-0/+4
|
* unposted: zstyle: Add a unit test and some comments.Daniel Shahaf2019-12-011-3/+16
|
* users/24451: zgetcwd: Add a guard against returning an empty string.Daniel Shahaf2019-11-191-1/+1
|
* users/24445: Add :P modifier to history code.Peter Stephenson2019-11-181-0/+10
| | | | | This was in the glob qualifier and variable code but got missed out of the separate history modifier function.
* 44864: Avoid inifinite loop in tty init.Peter Stephenson2019-10-281-2/+16
| | | | | | | If we can't grab the terminal in interactive mode, give up after 100 goes. This is a completely arbitrary choice; we simply don't know what in the system could change the result of looping further.
* unposted: fix indentation (whitespace-only change)romkatv2019-10-281-30/+30
| | | | | | | Indentatin in moveto was broken by 3eea35d0 (my bad), making it difficult to read. This commit reverts it to what it used ot be. While at it, fix indentation in a few other places in the same file.
* 44841: Better checking of errors from "nice"_RuRo_ (Андрей Стоцкий)2019-10-161-2/+5
|
* unposted: functions -c: Fix typoDaniel Shahaf2019-10-101-1/+1
|
* bug fix: infinite loop when tty disappearsromkatv2019-10-041-1/+1
| | | | | | | | | | | | | | | | | | | | | When TTY disappears and there is at least one fd watcher, raw_getbyte() can enter an infinite loop where it keeps calling poll() over and over again. To reproduce, open a terminal, start zsh and type this: rm -f /tmp/fifo mkfifo /tmp/fifo exec 3<>/tmp/fifo do-nothing() {} zle -F 3 do-nothing Then make TTY disappear. For example, kill the parent with `kill -9 $PPID` and close the terminal window if it's still there. Observe that zsh is consiming 100% CPU. Note that do-nothing() never gets called. This patch makes the poll() loop in raw_getbyte() terminate when TTY is signalling POLLHUP. This makes the behavior consistent with the case where TTY disappears while no fd watchers are installed.
* 44714: Take account of CDABLE_VARS while checking spellingJun-ichi Takimoto2019-08-291-0/+2
|
* 44710: support RLIMIT_UMTXP on FreeBSDJun-ichi Takimoto2019-08-282-0/+12
|
* 44709: incluce sys/capability.h only if HAVE_CAP_GET_PROC is definedJun-ichi Takimoto2019-08-281-1/+1
|
* 44664: Fix problem with temporary assignment.Peter Stephenson2019-08-141-1/+3
| | | | | "foo=bar builtin" inside a function lost any variable from enclosing scope.
* Copy functions using functions -c old new.Peter Stephenson2019-08-031-2/+41
| | | | Documentation and test.
* 44635: Don't apply STAT_NOPRINT to backgrounded jobsPeter Stephenson2019-08-031-1/+2
|
* 44637: = doesn't need quoting in awk regexp.Shlomi Fish2019-08-031-1/+1
| | | | Known to cause warnings in gawk 5.
* 44582: Fix foregoing commit to use DPUTS() betterKamil Dudka2019-07-261-6/+4
|
* 44566: make sure Zle doesn't crash if history entry not foundKamil Dudka2019-07-241-2/+12
|
* 44509: Prevent crash with modified path / PATH combination.Peter Stephenson2019-07-151-4/+12
| | | | | | Crash came from "fn() { typeset -U path=($path); unset PATH; }". Note PATH unset is global as only path was made local.
* 44502: Quote function name for "autoload -X"Bart Schaefer2019-07-081-1/+1
|
* 44480: Don't automatically close externally visible file descroptors.Peter Stephenson2019-07-022-3/+6
| | | | | | | | | | These are descriptors marked FDT_EXTERNAL. Make all sysopen'ed file descriptors FDT_EXTERNAL. Make =(...) call closem() consistent with other substitutions. Document file descriptors are left open.