[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
No recursion limit in functions
From: |
Frederik Meerwaldt |
Subject: |
No recursion limit in functions |
Date: |
Tue, 2 Dec 2003 18:34:06 +0100 |
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Dear Bash Developer Team,
we (cray-cyber.org) found out a bug in bash (all versions, including
the current patches which are available for download - occures on all
platforms), which causes it to crash.
Bash has no recursion limit in functions, so
function xxx { xxx; }
xxx
Causes bash to consume more and more memory until it dies (Illegal
Instruction, Segmentation Fault, etc. - the signal heavily depends on
the platform).
I wrote a little "fix", which is to limit the recursion depth of
functions to, for example 20:
*** ../bash-2.05b/execute_cmd.c Mon Mar 18 19:24:22 2002
- --- execute_cmd.c Tue Dec 2 18:13:39 2003
***************
*** 223,228 ****
- --- 223,231 ----
environment. */
int subshell_environment;
+ /* Current recursion depth of a single function - limited to 20 */
+ int funct_recdepth=0;
+
/* Currently-executing shell function. */
SHELL_VAR *this_shell_function;
***************
*** 2853,2858 ****
- --- 2856,2869 ----
COMMAND *tc, *fc;
char *debug_trap, *error_trap;
+ if (funct_recdepth > 19) {
+ fprintf(stderr, "Maximum function recursive depth of 20 reached
- - aborti
ng...\n");
+ fflush(stderr);
+ return(1);
+ }
+ else
+ funct_recdepth++;
+
USE_VAR(fc);
tc = (COMMAND *)copy_command (function_cell (var));
***************
*** 2944,2949 ****
- --- 2955,2961 ----
if (variable_context == 0 || this_shell_function == 0)
make_funcname_visible (0);
+ funct_recdepth--;
return (result);
}
Whether this really makes sense to limit it the number to a hardcoded
number of recursive functions is not sure....
Perhaps a higher number such as 50 or 100 would make more sense.
However, in our opinion, such a recursion limit is necessary because a
single user can use excessive memory and cause the process to hang or
crash without it.
Greetings from Germany,
Freddy
- --
Freddy Meerwaldt (frederik@freddym.org)
http://www.freddym.org <-- find my PGP Key here
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.3 (Darwin)
iD8DBQE/zM0Qc6nyuk7sJRIRAnX6AKCz6oeFnaf4Xxufy/ryXyCOZVm4lgCgnuBm
pHrPJ4cVZTeuBLwDHaviHBU=
=2qNN
-----END PGP SIGNATURE-----