| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
|
|
| |
* Pass RGID instead of passwd GID to initgroups()
* Clean up #ifdefs, avoid unnecessary checks
* Flatten conditions
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- 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
|
| |
|
| |
|
|
|
|
|
| |
The flags need resetting for this branch otherwise e.g. command
substitution with non-zero status doesn't cause exit.
|
|
|
|
|
| |
The queueing added in execarith() in 45083 is reverted since the callee
does this now.
|
|
|
|
| |
change.
|
| |
|
|
|
|
|
| |
Otherwise, a signal handler might create files while the temporary umask
is in effect.
|
| |
|
| |
|
|
|
|
| |
potential match.
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
| |
This will let error messages include long integers.
|
|
|
|
|
| |
Otherwise we could get re-entrancy in memory functions when
setting variables.
|
|
|
|
|
| |
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.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
| |
"from_where" parameter. No functional change.
|
|
|
|
| |
zsh-5.3.1-182-gd7110d8f0).
|
|
|
|
| |
This could cause a signal received during $(...) to corrupt memory.
|
|
|
|
|
| |
Otherwise forms of argument allowed by POSIX are interpreted as
options instead.
|
|
|
|
| |
As the shortest match is preferred, zero-length matches beat any other.
|
| |
|
|
|
|
| |
Dashes could cause problems in directory prefixes.
|
| |
|
| |
|
| |
|
|
|
|
|
| |
This was in the glob qualifier and variable code but got missed out
of the separate history modifier function.
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
| |
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.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
| |
|
| |
|
|
|
|
|
| |
"foo=bar builtin" inside a function lost any variable from
enclosing scope.
|
|
|
|
| |
Documentation and test.
|
| |
|
|
|
|
| |
Known to cause warnings in gawk 5.
|
| |
|
| |
|
|
|
|
|
|
| |
Crash came from "fn() { typeset -U path=($path); unset PATH; }".
Note PATH unset is global as only path was made local.
|
| |
|