Article View: gnu.bash.bug
Article #369bash bug report
From: Emil M. Scoffone
Date: Fri, 21 Jul 1989 22:14
Date: Fri, 21 Jul 1989 22:14
227 lines
6526 bytes
6526 bytes
To: bug-bash@ai.mit.edu
GNU program: Bash 1.02
Machine: Compaq Deskpro 386/16
Operating System: System V/386 Release 3.2
(vendor: Bell Technologies)
Compiler: GNU C, version 1.35, with GNU as and ld.
****************************************
These are bugs I found while installing bash:
----------------------------------------
in `shell.c':
on line 305: 'job_control' undefined.
Fix:
changed line 304 from
#ifndef JOB_CONTROL
to
#ifndef NOJOBS
----------------------------------------
in `variables.c' and `readline.c':
`struct pwd' should be `struct passwd'
----------------------------------------
in `readline.c':
`sigsetmask' is referenced, but there is no such
system call on my UNIX.
Fix:
I defined a dummy `sigsetmask' that does nothing. I
was too lazy to write one that mimicks the behaviour of
BSD `sigsetmask'
----------------------------------------
in 'glob.c':
I added an #ifdef to use the GNU builtin alloca.
----------------------------------------
****************************************
These are bugs I found while running bash:
----------------------------------------
The shell does incorrectly reports exit codes from a killed job.
This is because a couple of masks were defined incorrectly in
`jobs.h'. I also parenthesized two expressions in 'nojobs.h'.
----------------------------------------
I get segmentation violations or memory errors, and the shell
bombs, when I hit ^D. This is the same bug I reported a couple
of days ago on a Sun 3/160, and I fixed it the same way
(added a few lines to 'parse.y').
----------------------------------------
****************************************
The following is a list of modifications to the source files:
------------------------------------------------------------
diff -c shell.c shell.c~
*** shell.c Tue Jul 11 20:33:11 1989
--- shell.c~ Fri Jul 21 15:01:20 1989
***************
*** 301,307 ****
else
{
interactive = 0;
! #ifndef NOJOBS
job_control = 0;
#endif
}
--- 301,307 ----
else
{
interactive = 0;
! #ifndef JOB_CONTROL
job_control = 0;
#endif
}
------------------------------------------------------------
diff -c variables.c variables.c~
*** variables.c Tue Jul 11 21:02:14 1989
--- variables.c~ Fri Jul 21 15:01:20 1989
***************
*** 26,31 ****
--- 26,35 ----
#include "flags.h"
#include "version.h"
+ #ifdef SYSV
+ struct pwd *getpwuid (), *getpwent ();
+ #endif
+
/* The list of shell variables that the user has created, or that came from
the environment. */
SHELL_VAR *variable_list;
------------------------------------------------------------
diff -c ./lib/readline.c ./lib/readline.c~
*** ./lib/readline.c Fri Jul 21 15:07:21 1989
--- ./lib/readline.c~ Fri Jul 21 15:02:42 1989
***************
*** 58,63 ****
--- 58,66 ----
#include <sys/stat.h>
#include <pwd.h>
+ #ifdef SYSV
+ struct pwd *getpwuid (), *getpwent ();
+ #endif
#define HACK_TERMCAP_MOTION
***************
*** 272,284 ****
*old_ttou = (Function *)NULL,
*old_ttin = (Function *)NULL,
*old_cont = (Function *)NULL;
-
- #ifdef SYSV
- void sigsetmask(mask)
- int mask;
- {
- }
- #endif SYSV
/* Handle an interrupt character. */
static
--- 275,280 ----
------------------------------------------------------------
diff -c jobs.h jobs.h~
*** jobs.h Mon Jul 17 22:14:14 1989
--- jobs.h~ Fri Jul 21 15:01:20 1989
***************
*** 17,26 ****
#define WSTOPPED 0177
#define w_status word
! #define w_termsig bytes.low & 0x7f
! #define w_coredump bytes.low & ~0x7f
#define w_stopsig bytes.high
#define w_retcode bytes.high
#define WIFEXITED(wstat) ((wstat).bytes.low == 0)
#define WIFSTOPPED(wstat) ((wstat).bytes.low == 0177)
#define WIFTERMINATED(wstat) ((wstat).bytes.high == 0)
--- 17,26 ----
#define WSTOPPED 0177
#define w_status word
! #define w_termsig bytes.low & ~0x7f
#define w_stopsig bytes.high
#define w_retcode bytes.high
+ #define w_coredump w_termsig & 0x7f
#define WIFEXITED(wstat) ((wstat).bytes.low == 0)
#define WIFSTOPPED(wstat) ((wstat).bytes.low == 0177)
#define WIFTERMINATED(wstat) ((wstat).bytes.high == 0)
------------------------------------------------------------
diff -c nojobs.c nojobs.c~
*** nojobs.c Mon Jul 17 22:14:43 1989
--- nojobs.c~ Fri Jul 21 15:11:22 1989
***************
*** 144,151 ****
/* Default return value. */
return_val = status.w_retcode & 0x7f;
! if ((status.w_termsig) != 0 &&
! (status.w_termsig) != WSTOPPED) {
#ifndef SYSV
extern char *sys_siglist[];
fprintf (stderr, "%s", sys_siglist[status.w_termsig]);
--- 144,151 ----
/* Default return value. */
return_val = status.w_retcode & 0x7f;
! if (status.w_termsig != 0 &&
! status.w_termsig != WSTOPPED) {
#ifndef SYSV
extern char *sys_siglist[];
fprintf (stderr, "%s", sys_siglist[status.w_termsig]);
------------------------------------------------------------
diff -c glob.c glob.c~
*** glob.c Tue Jul 11 21:35:20 1989
--- glob.c~ Fri Jul 21 15:02:19 1989
***************
*** 51,63 ****
#ifdef sparc
#include <alloca.h>
#else
-
- #ifdef __GNUC__
- #define alloca __builtin_alloca
- #else
extern char *alloca ();
- #endif
-
#endif /* sparc */
extern char *malloc (), *realloc ();
--- 51,57 ----
------------------------------------------------------------
diff -c parse.y parse.y~
*** parse.y Mon Jul 17 22:19:06 1989
--- parse.y~ Fri Jul 21 15:11:03 1989
***************
*** 429,440 ****
else
current_readline_line = readline (current_readline_prompt);
- if (current_readline_line == (char *) EOF)
- {
- current_readline_line = (char *)NULL;
- return (EOF);
- }
-
current_readline_line_index = 0;
current_readline_line =
(char *)xrealloc (current_readline_line,
--- 429,434 ----
Technical Details
Message-ID:
<8907212214.AA19076@sdchemv1.chem.ucsd.edu>Path:
arc1-ca.pugleaf.net!utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!tut.cis.ohio-state.edu!UCSD.EDU!emil%chemShow Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!tut.cis.ohio-state.edu!UCSD.EDU!emil%chem From: emil%chem@UCSD.EDU (Emil M. Scoffone) Newsgroups: gnu.bash.bug Subject: bash bug report Message-ID: <8907212214.AA19076@sdchemv1.chem.ucsd.edu> Date: 21 Jul 89 22:14:08 GMT Sender: daemon@tut.cis.ohio-state.edu Distribution: gnu Organization: GNUs Not Usenet Lines: 227