2.16. RHBA-2011:1072: new package: tcsh617

A new tcsh617 package, a replacement for the tcsh package that, among other fixes and enhancements, addresses various bugs of the tcsh package, is now available for Red Hat Enterprise Linux 5.


This update was released as errata RHBA-2011:1072 – new package: tcsh617.
Tcsh is a command language interpreter compatible with the C shell (csh), which can be used as an interactive login shell, as well as a shell script command processor.
This new tcsh617 package serves as a replacement for the tcsh package, and upgrades tcsh to upstream version 6.17, which incorporates a number of bug fixes and enhancements over the previous version (6.14), which was released as a part of Red Hat Enterprise Linux 5.5. The tcsh package has been retained for compatibility with the older version of tcsh.
The tcsh and tcsh617 packages are mutually-exclusive: both packages cannot be installed simultaneously. Users of tcsh who require the bug fixes and enhancements included in this upgraded package are advised to first uninstall the tcsh package and then install this new tcsh617 package. (BZ#676136)

Bug Fixes:

The tcsh shell used to call malloc()-related functions inside signal handlers. This could cause tcsh to become unresponsive due to calling just-interrupted internal glibc locking algorithms again. Operations related to malloc() were moved from signal handlers to common routines.
Previously, the tcsh(1) man page stated that the shell would not run a set-user ID script without an -b argument. This statement was removed from the man page because it is forbidden to run set-user ID scripts in Red Hat Enterprise Linux 5.
Prior to this update, the tcsh(1) man page inaccurately stated that it is mandatory to use the group option when using the newgrp built-in command. The corrected statement now says that using group is optional.
Previously, the tcsh shell allowed to name variables in incorrect formats, such as by beginning a variable name with a digit. This issue has been fixed: variable names are now verified according to Unix variable-naming conventions.
BZ#437079, BZ#437080
The tcsh(1) man page inaccurately stated that the hup and nohup built-in commands, when used without an argument, can be used only within a shell script. The man page has been corrected: it now states that the hup and nohup built-in commands can be used when running the shell non-interactively.
When tcsh did not exit properly, it could have entered an infinite loop, using 100% of the CPU, and become unresponsive. This was caused by a function interrupting the exit routine and then re-entering the code and thus causing it to loop infinitely.
This package fixes the return value of the status (or $?) variable in the case of pipelines and backquoted commands. The anyerror variable, which selects behavior, has been added to retain the backward compatibility.
When tcsh evaluated a backquoted command (using command substitution) which itself contained backquotes, it could have dumped core due to a buffer overflow. With this update, nested command substitutions are now handled correctly, and tcsh no longer dumps core in this situation.
Previously, when the LANG environment variable was set to C, the tcsh shell could ignore several characters that were following a wide (greater than 8 bits) character while receiving user's input. This package fixes the issue and tcsh no longer ignores any characters.
Previously, when a command was substituted using backquotes, a second, redundant fork() system call was performed. This could have caused problems when a child process needed to find the PID of its tcsh parent. With this new package, only one fork() is performed.
Previously, running tcsh in verbose mode caused the shell to append history to its output on exit. This new package fixes the issue and tcsh now works as expected.
On a local machine, tcsh set the REMOTEHOST environment variable to an empty string, even though this variable should only have been set on a remote machine. This error has been fixed and REMOTEHOST is no longer set on a local machine.
Previously, if the printexitvalue variable was set, tcsh returned the exit code number as a part of the command output, rendering the output unusable. This has happened due to a missing job status flag. The proper flag has been set and the command output is now correct.
Previously, under certain circumstances, a null pointer may have been incorrectly dereferenced, causing the tcsh shell to terminate unexpectedly. With this update, the pointer is now tested for the NULL value before it is dereferenced, and tcsh no longer crashes in this circumstance.
The tcsh shell entered an infinitive loop when standard output was redirected to a child process by a pipe. When the child process was terminated, tcsh tried to print a message to the already-closed pipe as a high-priority event that could never finish. This has been fixed so in case that such child process terminates, the relevant error event is removed from the event queue before it could have been written to the broken pipe, and the parent process is terminated as well.
All users of the tcsh package who want to upgrade their version of tcsh to 6.17 are advised to uninstall the tcsh package and then install this upgraded tcsh617 package, which provides these bug fixes and enhancements.