			     BASH PATCH REPORT
			     =================

Bash-Release:	4.2
Patch-ID:	bash42-035

Bug-Reported-by:	Dan Douglas <ormaaj@gmail.com>
Bug-Reference-ID:	<2766482.Ksm3GrSoYi@smorgbox>
Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2012-06/msg00071.html

Bug-Description:

When given a number of lines to read, `mapfile -n lines' reads one too many.

Patch (apply with `patch -p0'):

*** ../bash-4.2-patched/builtins/mapfile.def	2010-05-29 22:09:47.000000000 -0400
--- ./builtins/mapfile.def	2012-06-20 09:48:33.000000000 -0400
***************
*** 196,206 ****
    interrupt_immediately++;
    for (array_index = origin, line_count = 1; 
!        zgetline (fd, &line, &line_length, unbuffered_read) != -1;
!        array_index++, line_count++) 
      {
-       /* Have we exceeded # of lines to store? */
-       if (line_count_goal != 0 && line_count > line_count_goal) 
- 	break;
- 
        /* Remove trailing newlines? */
        if (flags & MAPF_CHOP)
--- 196,202 ----
    interrupt_immediately++;
    for (array_index = origin, line_count = 1; 
!  	zgetline (fd, &line, &line_length, unbuffered_read) != -1;
! 	array_index++) 
      {
        /* Remove trailing newlines? */
        if (flags & MAPF_CHOP)
***************
*** 218,221 ****
--- 214,222 ----
  
        bind_array_element (entry, array_index, line, 0);
+ 
+       /* Have we exceeded # of lines to store? */
+       line_count++;
+       if (line_count_goal != 0 && line_count > line_count_goal) 
+ 	break;
      }
  
*** ../bash-4.2-patched/patchlevel.h	Sat Jun 12 20:14:48 2010
--- ./patchlevel.h	Thu Feb 24 21:41:34 2011
***************
*** 26,30 ****
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 34
  
  #endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 35
  
  #endif /* _PATCHLEVEL_H_ */
