1
0
Fork 0
mirror of git://git.code.sf.net/p/cdesktopenv/code synced 2025-03-09 15:50:02 +00:00
cde/src/cmd/ksh93/bltins
Martijn Dekker 56805b25af Fix leak and crash upon defining functions in subshells
A memory leak occurred upon leaving a virtual subshell if a
function was defined within it. If this was done more than 32766
(= 2^15-2 = the 'short' max value - 1) times, the shell crashed.
Discussion and reproducer: https://github.com/ksh93/ksh/issues/114

src/cmd/ksh93/sh/subshell.c: table_unset():
- A subshell-defined function was never freed because a broken
  check for autoloaded functions (which must not be freed[*]). It
  looked for an initial '/' in the canonical path of the script
  file that defined the function, but that path is also stored for
  regular functions. Now use a check that executes nv_search() in
  fpathdict, the same method used in _nv_unset() in name.c for a
  regular function unset.

src/cmd/ksh93/bltins/misc.c: b_dot_cmd():
- Fix an additional memory leak introduced in bd88cc7f, that caused
  POSIX functions (which are run with b_dot_cmd() like dot scripts)
  to leak extra. This fix avoids both the crash fixed there and the
  memory leak by introducing a 'tofree' variable remembering the
  filename to free. Thanks to Johnothan King for the patch.

src/lib/libast/include/stk.h,
src/lib/libast/misc/stk.c,
src/lib/libast/man/stk.3,
src/lib/libast/man/stak.3:
- Make the stack more resilient by extending the stack reference
  counter 'stkref' from (signed) short to unsigned int. On modern
  systems with 32-bit ints, this extends the maximum number of
  elements on a stack from 2^15-1==32767 to 2^32-1==4294967295.
  The ref counter can never be negative, so there is no reason for
  signedness. sizeof(int) is defined as the size of a single CPU
  word, so this should not affect performance at all.
     On a 16-bit system (not that ksh still compiles there), this
  doubles the max number of entries to 2^16-1=65535.

src/cmd/ksh93/tests/leaks.sh:
- Add leak regression tests for ksh functions, POSIX functions, dot
  scripts run with '.', and dot scripts run with 'source'.

src/cmd/ksh93/tests/path.sh:
- Add an output builtin with a redirect to an autoloaded function
  so that a crash[*] is triggered if the check for an autoloaded
  function is ever removed from table_unset(), as was done in ksh
  93v- (which crashed).

[*] Freeing autoloaded functions after leaving a virtual subshell
    causes a crashing bug: https://github.com/att/ast/issues/803

Co-authored-by: Johnothan King <johnothanking@protonmail.com>
Fixes: https://github.com/ksh93/ksh/issues/114
2020-08-14 00:25:31 +01:00
..
alarm.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
cd_pwd.c Fix incorrect behavior of 'cd ../.foo' (#46) 2020-06-26 23:36:29 +01:00
cflow.c Fix regression in 'return' introduced by 98e0fc94 2020-06-12 01:45:17 +02:00
enum.c Fix some errors in the documentation and other minor issues (#42) 2020-06-25 19:31:51 +02:00
getopts.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
hist.c Make the 'history' and 'r' commands builtins (#76) 2020-07-16 18:56:49 +01:00
misc.c Fix leak and crash upon defining functions in subshells 2020-08-14 00:25:31 +01:00
mkservice.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
print.c printf %#H: tweak writing unreserved chars (re: 8477d2ce) 2020-08-13 04:51:52 +01:00
read.c Fix a crash when 'read -u' is given an invalid fd (#53) 2020-07-01 18:14:10 +01:00
regress.c Fix 47 typos in user-facing help and error messages 2020-06-12 01:45:12 +02:00
sleep.c Fix how unrecognized options are handled in 'sleep' and 'suspend' (#93) 2020-07-26 02:18:49 +01:00
test.c silence macro redefinition warnings (re: 7003aba4) 2020-06-16 04:51:21 +02:00
trap.c Fix how unrecognized options are handled in 'sleep' and 'suspend' (#93) 2020-07-26 02:18:49 +01:00
typeset.c Make liblist an extern to fix dtksh compile (#108) 2020-08-05 22:18:22 +01:00
ulimit.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
umask.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
whence.c whence -a/type -a: report both function and built-in by same name 2020-07-20 21:16:24 +01:00