Bash-4.4 Official Patch 7

2017-01-20 Thread Chet Ramey
 BASH PATCH REPORT
 =

Bash-Release:   4.4
Patch-ID:   bash44-007

Bug-Reported-by:Jens Heyens 
Bug-Reference-ID:   
Bug-Reference-URL:  https://savannah.gnu.org/support/?109224

Bug-Description:

When performing filename completion, bash dequotes the directory name being
completed, which can result in match failures and potential unwanted
expansion.

Patch (apply with `patch -p0'):

*** ../bash-4.4-patched/bashline.c  2016-08-05 21:44:05.0 -0400
--- bashline.c  2017-01-19 13:15:51.0 -0500
***
*** 143,147 
  static void restore_directory_hook __P((rl_icppfunc_t));
  
! static int directory_exists __P((const char *));
  
  static void cleanup_expansion_error __P((void));
--- 144,148 
  static void restore_directory_hook __P((rl_icppfunc_t));
  
! static int directory_exists __P((const char *, int));
  
  static void cleanup_expansion_error __P((void));
***
*** 3103,3111 
  }
  
! /* Check whether not the (dequoted) version of DIRNAME, with any trailing 
slash
!removed, exists. */
  static int
! directory_exists (dirname)
   const char *dirname;
  {
char *new_dirname;
--- 3107,3116 
  }
  
! /* Check whether not DIRNAME, with any trailing slash removed, exists.  If
!SHOULD_DEQUOTE is non-zero, we dequote the directory name first. */
  static int
! directory_exists (dirname, should_dequote)
   const char *dirname;
+  int should_dequote;
  {
char *new_dirname;
***
*** 3113,3118 
struct stat sb;
  
!   /* First, dequote the directory name */
!   new_dirname = bash_dequote_filename ((char *)dirname, 
rl_completion_quote_character);
dirlen = STRLEN (new_dirname);
if (new_dirname[dirlen - 1] == '/')
--- 3118,3124 
struct stat sb;
  
!   /* We save the string and chop the trailing slash because stat/lstat behave
!  inconsistently if one is present. */
!   new_dirname = should_dequote ? bash_dequote_filename ((char *)dirname, 
rl_completion_quote_character) : savestring (dirname);
dirlen = STRLEN (new_dirname);
if (new_dirname[dirlen - 1] == '/')
***
*** 3146,3150 
  should_expand_dirname = '`';
  
!   if (should_expand_dirname && directory_exists (local_dirname))
  should_expand_dirname = 0;

--- 3152,3156 
  should_expand_dirname = '`';
  
!   if (should_expand_dirname && directory_exists (local_dirname, 0))
  should_expand_dirname = 0;

***
*** 3156,3160 
global_nounset = unbound_vars_is_error;
unbound_vars_is_error = 0;
!   wl = expand_prompt_string (new_dirname, 0, W_NOCOMSUB|W_COMPLETE);  
/* does the right thing */
unbound_vars_is_error = global_nounset;
if (wl)
--- 3162,3166 
global_nounset = unbound_vars_is_error;
unbound_vars_is_error = 0;
!   wl = expand_prompt_string (new_dirname, 0, 
W_NOCOMSUB|W_NOPROCSUB|W_COMPLETE);  /* does the right thing */
unbound_vars_is_error = global_nounset;
if (wl)
***
*** 3245,3249 
  }
  
!   if (should_expand_dirname && directory_exists (local_dirname))
  should_expand_dirname = 0;
  
--- 3262,3266 
  }
  
!   if (should_expand_dirname && directory_exists (local_dirname, 1))
  should_expand_dirname = 0;
  
***
*** 3251,3255 
  {
new_dirname = savestring (local_dirname);
!   wl = expand_prompt_string (new_dirname, 0, W_NOCOMSUB|W_COMPLETE);  
/* does the right thing */
if (wl)
{
--- 3268,3272 
  {
new_dirname = savestring (local_dirname);
!   wl = expand_prompt_string (new_dirname, 0, 
W_NOCOMSUB|W_NOPROCSUB|W_COMPLETE);  /* does the right thing */
if (wl)
{
*** ../bash-4.4/subst.c 2016-08-30 16:46:38.0 -0400
--- subst.c 2017-01-19 07:09:57.0 -0500
***
*** 9459,9462 
--- 9459,9466 
  if (word->flags & W_COMPLETE)
tword->flags |= W_COMPLETE; /* for command substitutions */
+ if (word->flags & W_NOCOMSUB)
+   tword->flags |= W_NOCOMSUB;
+ if (word->flags & W_NOPROCSUB)
+   tword->flags |= W_NOPROCSUB;
  
  temp = (char *)NULL;
*** ../bash-4.4/patchlevel.h2016-06-22 14:51:03.0 -0400
--- patchlevel.h2016-10-01 11:01:28.0 -0400
***
*** 26,30 
 looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 6
  
  #endif /* _PATCHLEVEL_H_ */
--- 26,30 
 looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 7
  
  #endif /* _PATCHLEVEL_H_ */

-- 
``The lyf so short, the craft so long to lerne.'' - Chaucer
 ``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, UTech, CWRUc...@case.eduhttp://cnswww.cns.cwru.edu/~chet/



Bash-4.4 Official Patch 6

2017-01-20 Thread Chet Ramey
 BASH PATCH REPORT
 =

Bash-Release:   4.4
Patch-ID:   bash44-006

Bug-Reported-by:
Bug-Reference-ID:   

Bug-Reference-URL:  

Bug-Description:

Out-of-range negative offsets to popd can cause the shell to crash attempting
to free an invalid memory block.

Patch (apply with `patch -p0'):

*** ../bash-4.4-patched/builtins/pushd.def  2016-01-25 13:31:49.0 
-0500
--- builtins/pushd.def  2016-10-28 10:46:49.0 -0400
***
*** 366,370 
  }
  
!   if (which > directory_list_offset || (directory_list_offset == 0 && which 
== 0))
  {
pushd_error (directory_list_offset, which_word ? which_word : "");
--- 366,370 
  }
  
!   if (which > directory_list_offset || (which < -directory_list_offset) || 
(directory_list_offset == 0 && which == 0))
  {
pushd_error (directory_list_offset, which_word ? which_word : "");
***
*** 388,391 
--- 388,396 
 of the list into place. */
i = (direction == '+') ? directory_list_offset - which : which;
+   if (i < 0 || i > directory_list_offset)
+   {
+ pushd_error (directory_list_offset, which_word ? which_word : "");
+ return (EXECUTION_FAILURE);
+   }
free (pushd_directory_list[i]);
directory_list_offset--;
*** ../bash-4.4/patchlevel.h2016-06-22 14:51:03.0 -0400
--- patchlevel.h2016-10-01 11:01:28.0 -0400
***
*** 26,30 
 looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 5
  
  #endif /* _PATCHLEVEL_H_ */
--- 26,30 
 looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 6
  
  #endif /* _PATCHLEVEL_H_ */

-- 
``The lyf so short, the craft so long to lerne.'' - Chaucer
 ``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, UTech, CWRUc...@case.eduhttp://cnswww.cns.cwru.edu/~chet/



Bash-4.4 Official Patch 8

2017-01-20 Thread Chet Ramey
 BASH PATCH REPORT
 =

Bash-Release:   4.4
Patch-ID:   bash44-008

Bug-Reported-by:Koichi MURASE 
Bug-Reference-ID:   

Bug-Reference-URL:  
http://lists.gnu.org/archive/html/bug-bash/2016-11/msg00050.html

Bug-Description:

Under certain circumstances, bash will evaluate arithmetic expressions as
part of reading an expression token even when evaluation is suppressed. This
happens while evaluating a conditional expression and skipping over the
failed branch of the expression.

Patch (apply with `patch -p0'):

*** ../bash-4.4-patched/expr.c  2015-10-11 14:46:36.0 -0400
--- expr.c  2016-11-08 11:55:46.0 -0500
***
*** 579,585 
if (curtok == QUES) /* found conditional expr */
  {
-   readtok ();
-   if (curtok == 0 || curtok == COL)
-   evalerror (_("expression expected"));
if (cval == 0)
{
--- 579,582 
***
*** 588,591 
--- 585,592 
}
  
+   readtok ();
+   if (curtok == 0 || curtok == COL)
+   evalerror (_("expression expected"));
+ 
val1 = EXP_HIGHEST ();
  
***
*** 594,600 
if (curtok != COL)
evalerror (_("`:' expected for conditional expression"));
!   readtok ();
!   if (curtok == 0)
!   evalerror (_("expression expected"));
set_noeval = 0;
if (cval)
--- 595,599 
if (curtok != COL)
evalerror (_("`:' expected for conditional expression"));
! 
set_noeval = 0;
if (cval)
***
*** 604,608 
--- 603,611 
}
  
+   readtok ();
+   if (curtok == 0)
+   evalerror (_("expression expected"));
val2 = expcond ();
+ 
if (set_noeval)
noeval--;
*** ../bash-4.4/patchlevel.h2016-06-22 14:51:03.0 -0400
--- patchlevel.h2016-10-01 11:01:28.0 -0400
***
*** 26,30 
 looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 7
  
  #endif /* _PATCHLEVEL_H_ */
--- 26,30 
 looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 8
  
  #endif /* _PATCHLEVEL_H_ */

-- 
``The lyf so short, the craft so long to lerne.'' - Chaucer
 ``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, UTech, CWRUc...@case.eduhttp://cnswww.cns.cwru.edu/~chet/



Bash-4.4 Official Patch 10

2017-01-20 Thread Chet Ramey
 BASH PATCH REPORT
 =

Bash-Release:   4.4
Patch-ID:   bash44-010

Bug-Reported-by:Clark Wang 
Bug-Reference-ID:   

Bug-Reference-URL:  
http://lists.gnu.org/archive/html/bug-bash/2016-11/msg00104.html

Bug-Description:

Depending on compiler optimizations and behavior, the `read' builtin may not
save partial input when a timeout occurs.

Patch (apply with `patch -p0'):

*** ../bash-4.4-patched/builtins/read.def   2016-05-16 14:24:56.0 
-0400
--- builtins/read.def   2016-11-25 12:37:56.0 -0500
***
*** 182,186 
  {
register char *varname;
!   int size, i, nr, pass_next, saw_escape, eof, opt, retval, code, print_ps2;
int input_is_tty, input_is_pipe, unbuffered_read, skip_ctlesc, skip_ctlnul;
int raw, edit, nchars, silent, have_timeout, ignore_delim, fd, lastsig, 
t_errno;
--- 182,187 
  {
register char *varname;
!   int size, nr, pass_next, saw_escape, eof, opt, retval, code, print_ps2;
!   volatile int i;
int input_is_tty, input_is_pipe, unbuffered_read, skip_ctlesc, skip_ctlnul;
int raw, edit, nchars, silent, have_timeout, ignore_delim, fd, lastsig, 
t_errno;

*** ../bash-4.4/patchlevel.h2016-06-22 14:51:03.0 -0400
--- patchlevel.h2016-10-01 11:01:28.0 -0400
***
*** 26,30 
 looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 9
  
  #endif /* _PATCHLEVEL_H_ */
--- 26,30 
 looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 10
  
  #endif /* _PATCHLEVEL_H_ */

-- 
``The lyf so short, the craft so long to lerne.'' - Chaucer
 ``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, UTech, CWRUc...@case.eduhttp://cnswww.cns.cwru.edu/~chet/



Bash-4.4 Official Patch 9

2017-01-20 Thread Chet Ramey
 BASH PATCH REPORT
 =

Bash-Release:   4.4
Patch-ID:   bash44-009

Bug-Reported-by:Hong Cho 
Bug-Reference-ID:   

Bug-Reference-URL:  
http://lists.gnu.org/archive/html/bug-bash/2016-12/msg00043.html

Bug-Description:

There is a race condition in add_history() that can be triggered by a fatal
signal arriving between the time the history length is updated and the time
the history list update is completed. A later attempt to reference an
invalid history entry can cause a crash.

Patch (apply with `patch -p0'):

*** ../bash-4.4-patched/lib/readline/history.c  2016-11-11 13:42:49.0 
-0500
--- lib/readline/history.c  2016-12-05 10:37:51.0 -0500
***
*** 280,283 
--- 280,284 
  {
HIST_ENTRY *temp;
+   int new_length;
  
if (history_stifled && (history_length == history_max_entries))
***
*** 296,306 
/* Copy the rest of the entries, moving down one slot.  Copy includes
 trailing NULL.  */
- #if 0
-   for (i = 0; i < history_length; i++)
-   the_history[i] = the_history[i + 1];
- #else
memmove (the_history, the_history + 1, history_length * sizeof 
(HIST_ENTRY *));
- #endif
  
history_base++;
  }
--- 297,303 
/* Copy the rest of the entries, moving down one slot.  Copy includes
 trailing NULL.  */
memmove (the_history, the_history + 1, history_length * sizeof 
(HIST_ENTRY *));
  
+   new_length = history_length;
history_base++;
  }
***
*** 316,320 
history_size = DEFAULT_HISTORY_INITIAL_SIZE;
  the_history = (HIST_ENTRY **)xmalloc (history_size * sizeof 
(HIST_ENTRY *));
! history_length = 1;
}
else
--- 313,317 
history_size = DEFAULT_HISTORY_INITIAL_SIZE;
  the_history = (HIST_ENTRY **)xmalloc (history_size * sizeof 
(HIST_ENTRY *));
! new_length = 1;
}
else
***
*** 326,330 
xrealloc (the_history, history_size * sizeof (HIST_ENTRY *));
}
! history_length++;
}
  }
--- 323,327 
xrealloc (the_history, history_size * sizeof (HIST_ENTRY *));
}
! new_length = history_length + 1;
}
  }
***
*** 332,337 
temp = alloc_history_entry ((char *)string, hist_inittime ());
  
!   the_history[history_length] = (HIST_ENTRY *)NULL;
!   the_history[history_length - 1] = temp;
  }
  
--- 329,335 
temp = alloc_history_entry ((char *)string, hist_inittime ());
  
!   the_history[new_length] = (HIST_ENTRY *)NULL;
!   the_history[new_length - 1] = temp;
!   history_length = new_length;
  }
  
*** ../bash-4.4/patchlevel.h2016-06-22 14:51:03.0 -0400
--- patchlevel.h2016-10-01 11:01:28.0 -0400
***
*** 26,30 
 looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 8
  
  #endif /* _PATCHLEVEL_H_ */
--- 26,30 
 looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 9
  
  #endif /* _PATCHLEVEL_H_ */

-- 
``The lyf so short, the craft so long to lerne.'' - Chaucer
 ``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, UTech, CWRUc...@case.eduhttp://cnswww.cns.cwru.edu/~chet/



Bash-4.4 Official Patch 11

2017-01-20 Thread Chet Ramey
 BASH PATCH REPORT
 =

Bash-Release:   4.4
Patch-ID:   bash44-011

Bug-Reported-by:Russell King 
Bug-Reference-ID:   
Bug-Reference-URL:  
http://lists.gnu.org/archive/html/bug-bash/2017-01/msg0.html

Bug-Description:

Subshells begun to run command and process substitutions may attempt to
set the terminal's process group to an incorrect value if they receive
a fatal signal.  This depends on the behavior of the process that starts
the shell.

Patch (apply with `patch -p0'):

*** ../bash-4.4-patched/sig.c   2016-02-11 15:02:45.0 -0500
--- sig.c   2017-01-04 09:09:47.0 -0500
***
*** 586,590 
if (sig == SIGHUP && (interactive || (subshell_environment & 
(SUBSHELL_COMSUB|SUBSHELL_PROCSUB
  hangup_all_jobs ();
!   end_job_control ();
  #endif /* JOB_CONTROL */
  
--- 571,576 
if (sig == SIGHUP && (interactive || (subshell_environment & 
(SUBSHELL_COMSUB|SUBSHELL_PROCSUB
  hangup_all_jobs ();
!   if ((subshell_environment & (SUBSHELL_COMSUB|SUBSHELL_PROCSUB)) == 0)
! end_job_control ();
  #endif /* JOB_CONTROL */
  
*** ../bash-4.4/patchlevel.h2016-06-22 14:51:03.0 -0400
--- patchlevel.h2016-10-01 11:01:28.0 -0400
***
*** 26,30 
 looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 10
  
  #endif /* _PATCHLEVEL_H_ */
--- 26,30 
 looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 11
  
  #endif /* _PATCHLEVEL_H_ */

-- 
``The lyf so short, the craft so long to lerne.'' - Chaucer
 ``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, UTech, CWRUc...@case.eduhttp://cnswww.cns.cwru.edu/~chet/