NetBSD Problem Report #45

From gnats  Wed Dec 15 16:54:30 1993
Received: from gandalf.bbb.no (gandalf.bbb.no [192.124.156.194]) by sun-lamp.cs.berkeley.edu (8.6.4/8.6.4) with ESMTP id QAA19060 for <gnats-bugs@sun-lamp.cs.berkeley.edu>; Wed, 15 Dec 1993 16:44:12 -0800
Message-Id: <199312160043.BAA01055@gandalf.bbb.no>
Date: Thu, 16 Dec 1993 01:43:12 +0100
From: tholo@SigmaSoft.COM
Reply-To: tholo@SigmaSoft.COM
To: gnats-bugs@sun-lamp.cs.berkeley.edu
Subject: talk(1) core dumps with no TERM set
X-Send-Pr-Version: 3.01.6

>Number:         45
>Category:       bin
>Synopsis:       If no TERM env. var is set, talk(1) core dumps on startup
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    jtc
>State:          closed
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Wed Dec 15 17:05:02 +0000 1993
>Closed-Date:    Mon Jan 24 22:04:29 +0000 1994
>Last-Modified:  Thu Jan 02 18:13:04 +0000 2014
>Originator:     Thorsten Lockert
>Release:        0.9-current
>Organization:
Thorsten Lockert  | postmaster@bbb.no   |
Postbox 435       | hostmaster@bbb.no   |  Universe, n.:
N-5001 Bergen     | tholo@bbb.no        |          The problem.
Norway            | tholo@sigmasoft.com |
>Environment:
System: NetBSD gandalf.bbb.no 0.9a GANDALF#10 i386
>Description:
It you do not have a terminal set, or your terminal is not powerful enough
to support curses(3), talk will coredump when started as it does not check
the return value from initscr(3curses).  The following patch fixes this and
a comparison problem in init_disp.c
>How-To-Repeat:
TERM= talk username
>Fix:
*** src/usr.bin/talk/init_disp.c.orig	Thu Dec 16 01:29:59 1993
--- src/usr.bin/talk/init_disp.c	Thu Dec 16 01:34:57 1993
***************
*** 54,60 ****
  	void sig_sent();
  	struct sigvec sigv;

! 	initscr();
  	(void) sigvec(SIGTSTP, (struct sigvec *)0, &sigv);
  	sigv.sv_mask |= sigmask(SIGALRM);
  	(void) sigvec(SIGTSTP, &sigv, (struct sigvec *)0);
--- 54,63 ----
  	void sig_sent();
  	struct sigvec sigv;

! 	if (initscr() == (WINDOW *)NULL) {
! 		printf("Terminal not set or not suitable for use with talk\n");
! 		exit(-1);
! 	}
  	(void) sigvec(SIGTSTP, (struct sigvec *)0, &sigv);
  	sigv.sv_mask |= sigmask(SIGALRM);
  	(void) sigvec(SIGTSTP, &sigv, (struct sigvec *)0);
***************
*** 100,106 ****
  	tcgetattr(0, &tty);
  	my_win.cerase = tty.c_cc[VERASE];
  	my_win.kill = tty.c_cc[VKILL];
! 	if (tty.c_cc[VWERASE] == (char) -1)
  		my_win.werase = '\027';	 /* control W */
  	else
  		my_win.werase = tty.c_cc[VWERASE];
--- 103,109 ----
  	tcgetattr(0, &tty);
  	my_win.cerase = tty.c_cc[VERASE];
  	my_win.kill = tty.c_cc[VKILL];
! 	if ((char)tty.c_cc[VWERASE] == (char) -1)
  		my_win.werase = '\027';	 /* control W */
  	else
  		my_win.werase = tty.c_cc[VWERASE];

>Release-Note:
>Audit-Trail:

State-Changed-From-To: open->analyzed
State-Changed-By: jtc
State-Changed-When: Thu Dec 16 17:47:10 1993
State-Changed-Why:
Many programs in the source tree don't check the return value of initscr().
Working on solution, one possibility is to make our initscr() act like 
SysV.

Responsible-Changed-From-To: gnats-admin->jtc
Responsible-Changed-By: jtc
Responsible-Changed-When: Fri Jan 14 14:59:31 1994
Responsible-Changed-Why:
Take responsibility for fixing bug.

State-Changed-From-To: analyzed->closed 
State-Changed-By: cgd 
State-Changed-When: Mon Jan 24 14:04:29 PST 1994 
State-Changed-Why:  
Fixed it.  initscr()'s return value wasn't being checked. 
was also a bug in 4.4BSD. 

>Unformatted:

NetBSD Home
NetBSD PR Database Search

(Contact us) $NetBSD: query-full-pr,v 1.39 2013/11/01 18:47:49 spz Exp $
$NetBSD: gnats_config.sh,v 1.8 2006/05/07 09:23:38 tsutsui Exp $
Copyright © 1994-2007 The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.