Commit Graph

44 Commits

Author SHA1 Message Date
christos abe6b5bef1 Make sure that we free memory and return null if we failed to initialize.
This should be pulled up to 1.6, but someone needs to make sure that it
does not affect broken programs.
2002-06-19 15:56:27 +00:00
blymn 574a09c0eb Fix off by one bug in t_agetstr - the pointer is moved to one past the
end of the termcap capability string.
2001-12-10 12:11:05 +00:00
blymn b49b6e823b stop t_freent freeing the same memory all the time. 2001-12-02 06:38:51 +00:00
christos 29c9bc3e1a make comment reflect reality (no functional changes) 2001-11-05 23:31:02 +00:00
christos a6265aca19 PR/10266: Jason R. Thorpe: curses programs totally broken.
Re-write t_agetstr() so that it does not use realloc so userland
programs don't break. We now use an internal buffer to keep track
of the memory we allocate. This changes the api of t_agetstr() to
take 2 fewer arguments, but there are not many programs that use it.
Please note that this does not change binary compatibility with the
previous t_agetstr() since the usage was:

	char *area, *p;

	*area = NULL;
	t_agetstr(ti, "ic", &area, &p);
	...
	free(area);

Since we don't touch the arguments and free(NULL) is a no-op, nothing
breaks.

Since we don't break binary compatibility there is no reason to bump
the library's major number, but since we change t_agetstr() I'll bump
the minor number for good measure.
2001-11-02 18:24:20 +00:00
christos 961acd7fc2 PR/10266: t_getstr() leaks memory. This PR will stay in feedback
until the problem gets addressed properly. The following fix
is a stopgap measure to stop the leaking :-(

I fixed the t_getstr() memory leak problem, but that instantly
revealed a problem in t_agetstr() which is an extremely broken
interface. It realloc's memory, potentially moving the area where
it returned pointers into in previous calls. This function needs
to be removed and or changed. I added a horrible work-around for
now, but I will revisit the problem shortly. In the meantime nobody
should be using the t_agetstr() API, and I'll be fixing the rest
of the programs and or the API when I figure out the best solution...
This is t_agetstr() is used by:

	games/hack/hack.termcap.c
	games/larn/io.c
	games/tetris/screen.c
	lib/libterm/termcap.c
	lib/libterm/termcap.h
	libexec/getty/main.c
	usr.bin/top/screen.c
	usr.bin/ul/ul.c
2001-10-31 21:52:17 +00:00
christos 566893d359 - use MAXPATHLEN to get the array size for the path we store.
- use strlcpy() instead of strncpy() to avoid the off-by-one error
  and the three missing '\0' terminations.
- perform bounds checks to make sure we don't turn this into a random
  memory writing tool using setenv HOME `perl -e 'print "a"x5000'`
2001-01-29 01:22:31 +00:00
lukem c9578df033 sprinkle some _DIAGASSERT()s in 2001-01-09 07:18:49 +00:00
blymn 63b8f446f6 * Improve the handling of BC and UP in t_goto, t_getent now queries
these capabilities and stashes them in "struct tinfo" for t_goto to
  use.  This makes the t_goto call more efficient and plugs a memory
  leak that was present in the original t_goto implementation.
  Thanks to Itojun for spotting this one too!
2000-06-03 07:14:55 +00:00
thorpej 2d11440f4d Back out previous change. It causes all sorts of problems. The
memory leakage stuff should be addressed, but this change was
obviously wrong.
2000-06-02 22:09:01 +00:00
christos b619ddeed7 Don't leak memory. 2000-06-02 18:00:42 +00:00
itojun 74d0ceb979 correct memory leak due to t_getstr() and realloc(). the commit will
prevent "top -s 0" from chewing up memory.

TODO: realloc() audit, revisit recent termcap/curses changes
2000-06-02 13:13:07 +00:00
lukem 86d8882273 size arg doesn't exist anymore, so don't DIAGASSERT it 2000-06-01 07:54:00 +00:00
blymn 04a0fa29b3 * Fixed Makefile to proper set includes path
* Added new function t_setinfo to allow setting the termcap info when
  termcap entry found.
2000-05-28 09:58:15 +00:00
blymn 22a94f7041 * Removed variable names from ansi style prototype
* Add -I. to CPPFLAGS
* Added new function t_agetstr which dynamically allocates area buffer.
2000-05-20 13:55:10 +00:00
lukem 84f71cf03e area is allowed to be NULL, so don't _DIAGASSERT it. 2000-05-14 01:14:29 +00:00
christos 0a73d7c493 - use strchr instead of index
- whitespace fixes
- tgetstr only looks at the first two characters; t_getstr looks at the whole
  string.
- fix DIAGASSERT brokenness.
2000-05-12 15:25:25 +00:00
blymn 0c575d5c64 * Modified t_getent to ignore the TERMCAP env variable if it contains the
ZZ attribute which indicates the TERMCAP was exported from another
  programme and has been truncated.  Iff a real termcap entry cannot be
  found then TERMCAP with a ZZ in it will be used as a last resort.
2000-05-08 13:17:14 +00:00
blymn adf14e0d21 Fixed t_getstr so that limit is only set to 0 iff area is NULL when an
unknown capability is requested.
2000-04-20 13:22:36 +00:00
blymn e584b4762e Ensure limit is sane on return from t_getstr if requested entry does
not exist.
2000-04-19 15:32:28 +00:00
blymn c833debc98 Added new function t_getterm to return the name string of a termcap
entry since the "new" interface hid this information away.
2000-04-19 13:41:28 +00:00
blymn 29912c2724 Split private data structure into separate file. 2000-04-18 14:42:42 +00:00
lukem d896261208 back out the #ifdef _DIAGNOSTIC argument checks; too many people complained.
_DIAGASSERT() is still retained.
1999-09-20 04:38:56 +00:00
lukem b48252f365 * use _DIAGASSERT() to check pointer arguments against NULL and file
descriptors against -1 (as appropriate).
* add actual checks which to detect stuff that would trigger_DIAGASSERT(),
  and attempt to return a sane error condition.
* knf some code
* remove some `register' decls.

the first two items result in the addition of code similar to the
following in various functions:

		_DIAGASSERT(path != NULL)
	#ifdef _DIAGNOSTIC
		if (path == NULL) {
			errno = EFAULT;
			return (-1);
		}
	#endif
1999-09-16 11:44:54 +00:00
blymn 540421553f Added minor tweak to t_getstr, by passing a NULL area pointer the size
of the requested capability will be returned in the limit parameter.
1999-08-17 12:13:24 +00:00
blymn c04ccf9dbf Updated library minor version and fixed small type glitch (limit is now
size_t not int)
1999-08-16 08:34:33 +00:00
blymn 1bb0398527 Added new interface to termcap that allows the manipulation of multiple
termcap entries simultaneously and lifts the 1024 byte limit on the termcap
entry.  The original termcap api is unchanged but also no longer has
the 1024 byte limit if the termcap functions are used.
1999-08-15 10:59:01 +00:00
simonb 6bf3aa19f9 More trailing white space. 1999-07-02 15:46:05 +00:00
abs 2ffb059188 If we have to truncate the entry, try hard to truncate on a whole cap. 1999-03-22 03:26:43 +00:00
agc 3f6ac2aece Clean up lint - one set but unused variable, 3 FALLTHROUGH comments needed,
and two LP64-isms.
1998-10-14 13:51:36 +00:00
mycroft a5fbe304ec const poisoning. 1998-07-27 01:55:23 +00:00
lukem 22630e700a install <termcap.h> (was from libedit), and use here... 1997-10-13 16:11:41 +00:00
lukem ae6b9c674a WARNSify 1997-10-09 11:58:15 +00:00
mrg 2d2ae90504 note possible security concerns. 1997-04-22 12:33:17 +00:00
mrg 9cd5492c02 - convert unsafe strcpy(), strcat() and sprintf() to the `n' versions.
- some KNF.
1997-01-23 14:01:45 +00:00
mikel a41241b92a /etc/termcap -> /usr/share/misc/termcap. Fixes misc/1401. 1996-11-12 07:50:11 +00:00
jtc be21c16fa0 hack to limit termcap strings to 1024 characters 1996-03-22 23:25:30 +00:00
pk 41621edd10 Prototypes (PR#1103). 1995-06-05 19:45:48 +00:00
cgd 41f1c39f00 clean up import, roll forward local fixes, clean up Ids 1995-02-27 10:18:34 +00:00
deraadt 5d98f1c7e0 was freeing random data. fix from vdlinden@fwi.uva.nl (Frank van der Linden) 1994-04-18 12:35:39 +00:00
cgd fe80c33c9c clean up; use standard headers and functions, rather than local def'ns. 1994-01-24 23:40:10 +00:00
glass 8cdd7bfe4f warnings about incompatible declarations fixed.
fix from <thomas@mathematik.uni-Bremen.de>
1994-01-13 22:24:06 +00:00
mycroft e9d867ef50 Add RCS identifiers. 1993-08-01 17:54:45 +00:00
cgd 61f282557f initial import of 386bsd-0.1 sources 1993-03-21 09:45:37 +00:00