bash/bash40-013
2009-04-08 10:41:09 +00:00

154 lines
4.5 KiB
Plaintext

BASH PATCH REPORT
=================
Bash-Release: 4.0
Patch-ID: bash40-013
Bug-Reported-by: jidanni@jidanni.org
Bug-Reference-ID:
Bug-Reference-URL: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=519165
Bug-Description:
Though references to $@ when there are no positional parameters will now
cause the shell to exit if the `errexit' option has been enabled, constructs
such as ${@:-foo} should not cause an exit.
Patch:
*** ../bash-4.0-patched/subst.c 2009-03-08 21:24:39.000000000 -0400
--- subst.c 2009-03-14 19:04:10.000000000 -0400
***************
*** 86,89 ****
--- 86,90 ----
/* Flags for the `pflags' argument to param_expand() */
#define PF_NOCOMSUB 0x01 /* Do not perform command substitution */
+ #define PF_IGNUNBOUND 0x02 /* ignore unbound vars even if -u set */
/* These defs make it easier to use the editor. */
***************
*** 264,268 ****
static int chk_arithsub __P((const char *, int));
! static WORD_DESC *parameter_brace_expand_word __P((char *, int, int));
static WORD_DESC *parameter_brace_expand_indir __P((char *, int, int, int *, int *));
static WORD_DESC *parameter_brace_expand_rhs __P((char *, char *, int, int, int *, int *));
--- 265,269 ----
static int chk_arithsub __P((const char *, int));
! static WORD_DESC *parameter_brace_expand_word __P((char *, int, int, int));
static WORD_DESC *parameter_brace_expand_indir __P((char *, int, int, int *, int *));
static WORD_DESC *parameter_brace_expand_rhs __P((char *, char *, int, int, int *, int *));
***************
*** 5196,5202 ****
NAME was found inside of a double-quoted expression. */
static WORD_DESC *
! parameter_brace_expand_word (name, var_is_special, quoted)
char *name;
! int var_is_special, quoted;
{
WORD_DESC *ret;
--- 5197,5203 ----
NAME was found inside of a double-quoted expression. */
static WORD_DESC *
! parameter_brace_expand_word (name, var_is_special, quoted, pflags)
char *name;
! int var_is_special, quoted, pflags;
{
WORD_DESC *ret;
***************
*** 5230,5234 ****
ret = param_expand (tt, &sindex, quoted, (int *)NULL, (int *)NULL,
! (int *)NULL, (int *)NULL, 0);
free (tt);
}
--- 5231,5235 ----
ret = param_expand (tt, &sindex, quoted, (int *)NULL, (int *)NULL,
! (int *)NULL, (int *)NULL, pflags);
free (tt);
}
***************
*** 5291,5295 ****
WORD_DESC *w;
! w = parameter_brace_expand_word (name, var_is_special, quoted);
t = w->word;
/* Have to dequote here if necessary */
--- 5292,5296 ----
WORD_DESC *w;
! w = parameter_brace_expand_word (name, var_is_special, quoted, PF_IGNUNBOUND);
t = w->word;
/* Have to dequote here if necessary */
***************
*** 5308,5312 ****
return (WORD_DESC *)NULL;
! w = parameter_brace_expand_word (t, SPECIAL_VAR(t, 0), quoted);
free (t);
--- 5309,5313 ----
return (WORD_DESC *)NULL;
! w = parameter_brace_expand_word (t, SPECIAL_VAR(t, 0), quoted, 0);
free (t);
***************
*** 6659,6663 ****
tdesc = parameter_brace_expand_indir (name + 1, var_is_special, quoted, quoted_dollar_atp, contains_dollar_at);
else
! tdesc = parameter_brace_expand_word (name, var_is_special, quoted);
if (tdesc)
--- 6660,6664 ----
tdesc = parameter_brace_expand_indir (name + 1, var_is_special, quoted, quoted_dollar_atp, contains_dollar_at);
else
! tdesc = parameter_brace_expand_word (name, var_is_special, quoted, PF_IGNUNBOUND);
if (tdesc)
***************
*** 6990,6994 ****
list = list_rest_of_args ();
! if (list == 0 && unbound_vars_is_error)
{
uerror[0] = '$';
--- 6991,6995 ----
list = list_rest_of_args ();
! if (list == 0 && unbound_vars_is_error && (pflags & PF_IGNUNBOUND) == 0)
{
uerror[0] = '$';
***************
*** 7052,7056 ****
list = list_rest_of_args ();
! if (list == 0 && unbound_vars_is_error)
{
uerror[0] = '$';
--- 7053,7057 ----
list = list_rest_of_args ();
! if (list == 0 && unbound_vars_is_error && (pflags & PF_IGNUNBOUND) == 0)
{
uerror[0] = '$';
*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
--- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 12
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 13
#endif /* _PATCHLEVEL_H_ */