This repository was archived by the owner on Jun 16, 2025. It is now read-only.
Check for invalid file descriptor in sh_close() #482
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a regression introduced after the last stable release which
causes mishandling of redirections in subshells. For e.g.
foo=$(print
/bin/echo bar
)print foo=$foo
prints
bar
on stdout and the variable foo is empty.Handling of redirections in $() style of command substitution was
changed after the last stable release. sh_subshell() function replaces
sfstdout with a newly created temporary stream with this line :
sp->saveout = sfswap(sfstdout, NULL);
The newly created stream has it's fd value set to -1. If `` style of
command subtitution happens inside $(), it tries to use this stream with
invalid fd and fails to close it. So redirections for stdout do not
work.
We should check if the stream that we are closing actually corresponds
to the file descriptor that we want to close. If not, directly invoke
close() on the fd.
Resolves: #478