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/lib/libast/man
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
..
aso.3 Fix a large number of typos and other problems (#110) 2020-08-07 00:50:11 +01:00
ast.3 Fix a large number of typos and other problems (#110) 2020-08-07 00:50:11 +01:00
astsa.3 Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
cdt.3 Fix a large number of typos and other problems (#110) 2020-08-07 00:50:11 +01:00
chr.3 Fix a large number of typos and other problems (#110) 2020-08-07 00:50:11 +01:00
compat.3 Fix 181 typos in user-facing documentation 2020-06-12 01:45:12 +02:00
error.3 Fix a large number of typos and other problems (#110) 2020-08-07 00:50:11 +01:00
find.3 Fix a large number of typos and other problems (#110) 2020-08-07 00:50:11 +01:00
fmt.3 Fix a large number of typos and other problems (#110) 2020-08-07 00:50:11 +01:00
fmtls.3 Fix a large number of typos and other problems (#110) 2020-08-07 00:50:11 +01:00
ftwalk.3 Fix a large number of typos and other problems (#110) 2020-08-07 00:50:11 +01:00
getcwd.3 Fix a large number of typos and other problems (#110) 2020-08-07 00:50:11 +01:00
hash.3 Fix a large number of typos and other problems (#110) 2020-08-07 00:50:11 +01:00
iblocks.3 Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
int.3 Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
ip6.3 Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
LIBAST.3 Fix a large number of typos and other problems (#110) 2020-08-07 00:50:11 +01:00
magic.3 Fix a large number of typos and other problems (#110) 2020-08-07 00:50:11 +01:00
mem.3 Fix a large number of typos and other problems (#110) 2020-08-07 00:50:11 +01:00
mime.3 Fix a large number of typos and other problems (#110) 2020-08-07 00:50:11 +01:00
modecanon.3 Fix a large number of typos and other problems (#110) 2020-08-07 00:50:11 +01:00
optget.3 Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
path.3 Fix a large number of typos and other problems (#110) 2020-08-07 00:50:11 +01:00
preroot.3 Fix a large number of typos and other problems (#110) 2020-08-07 00:50:11 +01:00
proc.3 Fix a large number of typos and other problems (#110) 2020-08-07 00:50:11 +01:00
re.3 Fix a large number of typos and other problems (#110) 2020-08-07 00:50:11 +01:00
regex.3 Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
setenviron.3 Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfdisc.3 Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfio.3 Fix a large number of typos and other problems (#110) 2020-08-07 00:50:11 +01:00
sig.3 Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
spawnveg.3 Fix a large number of typos and other problems (#110) 2020-08-07 00:50:11 +01:00
stak.3 Fix leak and crash upon defining functions in subshells 2020-08-14 00:25:31 +01:00
stk.3 Fix leak and crash upon defining functions in subshells 2020-08-14 00:25:31 +01:00
strcopy.3 Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
strdup.3 Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
strelapsed.3 Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
strerror.3 Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
stresc.3 Fix a large number of typos and other problems (#110) 2020-08-07 00:50:11 +01:00
streval.3 Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
strgid.3 Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
strmatch.3 Fix a large number of typos and other problems (#110) 2020-08-07 00:50:11 +01:00
stropt.3 Fix a large number of typos and other problems (#110) 2020-08-07 00:50:11 +01:00
strperm.3 Fix a large number of typos and other problems (#110) 2020-08-07 00:50:11 +01:00
strsignal.3 Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
strsort.3 Fix a large number of typos and other problems (#110) 2020-08-07 00:50:11 +01:00
strtape.3 Fix a large number of typos and other problems (#110) 2020-08-07 00:50:11 +01:00
strton.3 Fix a large number of typos and other problems (#110) 2020-08-07 00:50:11 +01:00
struid.3 Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
swap.3 Fix a large number of typos and other problems (#110) 2020-08-07 00:50:11 +01:00
tab.3 Fix a large number of typos and other problems (#110) 2020-08-07 00:50:11 +01:00
tm.3 Fix a large number of typos and other problems (#110) 2020-08-07 00:50:11 +01:00
tmx.3 Fix a large number of typos and other problems (#110) 2020-08-07 00:50:11 +01:00
tok.3 Fix a large number of typos and other problems (#110) 2020-08-07 00:50:11 +01:00
touch.3 Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
tv.3 Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
vecargs.3 Fix a large number of typos and other problems (#110) 2020-08-07 00:50:11 +01:00
vmalloc.3 Fix a large number of typos and other problems (#110) 2020-08-07 00:50:11 +01:00