Commit 607633f5 authored by Mike Frysinger's avatar Mike Frysinger
Browse files

some more upstream patches

parent 6d008e61
Loading
Loading
Loading
Loading
+106 −0
Original line number Diff line number Diff line
			     BASH PATCH REPORT
			     =================

Bash-Release: 3.1
Patch-ID: bash31-015

Bug-Reported-by: Benoit Vila
Bug-Reference-ID: <43FCA614.1090108@free.fr>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-02/msg00058.html

Bug-Description:

A problem with the extended globbing code prevented dots from matching
filenames when used in some extended matching patterns.

Patch:

*** bash-3.1/lib/glob/sm_loop.c	Sun Oct 16 21:21:04 2005
--- bash-3.1/lib/glob/sm_loop.c	Mon Feb 27 17:18:43 2006
***************
*** 639,643 ****
    CHAR *pnext;			/* pointer to next sub-pattern */
    CHAR *srest;			/* pointer to rest of string */
!   int m1, m2;
  
  #if DEBUG_MATCHING
--- 638,642 ----
    CHAR *pnext;			/* pointer to next sub-pattern */
    CHAR *srest;			/* pointer to rest of string */
!   int m1, m2, xflags;		/* xflags = flags passed to recursive matches */
  
  #if DEBUG_MATCHING
***************
*** 645,648 ****
--- 644,648 ----
  fprintf(stderr, "extmatch: s = %s; se = %s\n", s, se);
  fprintf(stderr, "extmatch: p = %s; pe = %s\n", p, pe);
+ fprintf(stderr, "extmatch: flags = %d\n", flags);
  #endif
  
***************
*** 678,683 ****
  		 multiple matches of the pattern. */
  	      if (m1)
! 		m2 = (GMATCH (srest, se, prest, pe, flags) == 0) ||
! 		      (s != srest && GMATCH (srest, se, p - 1, pe, flags) == 0);
  	      if (m1 && m2)
  		return (0);
--- 678,687 ----
  		 multiple matches of the pattern. */
  	      if (m1)
! 		{
! 		  /* if srest > s, we are not at start of string */
! 		  xflags = (srest > s) ? (flags & ~FNM_PERIOD) : flags;
! 		  m2 = (GMATCH (srest, se, prest, pe, xflags) == 0) ||
! 			(s != srest && GMATCH (srest, se, p - 1, pe, xflags) == 0);
! 		}
  	      if (m1 && m2)
  		return (0);
***************
*** 705,710 ****
  	  for ( ; srest <= se; srest++)
  	    {
  	      if (GMATCH (s, srest, psub, pnext - 1, flags) == 0 &&
! 		  GMATCH (srest, se, prest, pe, flags) == 0)
  		return (0);
  	    }
--- 709,716 ----
  	  for ( ; srest <= se; srest++)
  	    {
+ 	      /* if srest > s, we are not at start of string */
+ 	      xflags = (srest > s) ? (flags & ~FNM_PERIOD) : flags;
  	      if (GMATCH (s, srest, psub, pnext - 1, flags) == 0 &&
! 		  GMATCH (srest, se, prest, pe, xflags) == 0)
  		return (0);
  	    }
***************
*** 727,731 ****
  		break;
  	    }
! 	  if (m1 == 0 && GMATCH (srest, se, prest, pe, flags) == 0)
  	    return (0);
  	}
--- 733,739 ----
  		break;
  	    }
! 	  /* if srest > s, we are not at start of string */
! 	  xflags = (srest > s) ? (flags & ~FNM_PERIOD) : flags;
! 	  if (m1 == 0 && GMATCH (srest, se, prest, pe, xflags) == 0)
  	    return (0);
  	}
*** bash-3.1/patchlevel.h	Wed Jul 20 13:58:20 2005
--- bash-3.1/patchlevel.h	Wed Dec  7 13:48:42 2005
***************
*** 26,30 ****
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 14
  
  #endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 15
  
  #endif /* _PATCHLEVEL_H_ */
+51 −0
Original line number Diff line number Diff line
			     BASH PATCH REPORT
			     =================

Bash-Release: 3.1
Patch-ID: bash31-016

Bug-Reported-by: Nikita Danilov <nikita@clusterfs.com>
Bug-Reference-ID: <17397.51015.769854.541057@gargle.gargle.HOWL>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-02/msg00064.html

Bug-Description:

Bash will dump core when attempting to perform globbing in directories with
very large numbers of files.

Patch:

*** bash-3.1/lib/glob/glob.c	Thu Mar 24 12:42:27 2005
--- bash-3.1/lib/glob/glob.c	Fri Mar  3 16:54:12 2006
***************
*** 361,364 ****
--- 361,365 ----
  
    firstmalloc = 0;
+   nalloca = 0;
  
    /* If PAT is empty, skip the loop, but return one (empty) filename. */
***************
*** 547,550 ****
--- 551,556 ----
  	      tmplink = lastlink;
  	    }
+ 	  else
+ 	    tmplink = 0;
  	  free (lastlink->name);
  	  lastlink = lastlink->next;
*** bash-3.1/patchlevel.h	Wed Jul 20 13:58:20 2005
--- bash-3.1/patchlevel.h	Wed Dec  7 13:48:42 2005
***************
*** 26,30 ****
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 15
  
  #endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 16
  
  #endif /* _PATCHLEVEL_H_ */
+131 −0
Original line number Diff line number Diff line
			     BASH PATCH REPORT
			     =================

Bash-Release: 3.1
Patch-ID: bash31-017

Bug-Reported-by: syphir@syphir.sytes.net
Bug-Reference-ID: <442421F5.3010105@syphir.sytes.net>
Bug-Reference-URL: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=358831

Bug-Description:

Array expansion fails with an arithmetic syntax error when the subscript
appears within double quotes.  For example: ${a["4"]}.

Patch:

*** bash-3.1/subst.c	Wed Apr 12 08:47:08 2006
--- bash-3.1/subst.c	Wed Apr 12 08:49:02 2006
***************
*** 2576,2579 ****
--- 2576,2586 ----
  }
  
+ char *
+ expand_arith_string (string, quoted)
+      char *string;
+ {
+   return (expand_string_if_necessary (string, quoted, expand_string));
+ }
+ 
  #if defined (COND_COMMAND)
  /* Just remove backslashes in STRING.  Returns a new string. */
***************
*** 5249,5253 ****
      t = (char *)0;
  
!   temp1 = expand_string_if_necessary (substr, Q_DOUBLE_QUOTES, expand_string);
    *e1p = evalexp (temp1, &expok);
    free (temp1);
--- 5256,5260 ----
      t = (char *)0;
  
!   temp1 = expand_arith_string (substr, Q_DOUBLE_QUOTES);
    *e1p = evalexp (temp1, &expok);
    free (temp1);
***************
*** 5294,5298 ****
        t++;
        temp2 = savestring (t);
!       temp1 = expand_string_if_necessary (temp2, Q_DOUBLE_QUOTES, expand_string);
        free (temp2);
        t[-1] = ':';
--- 5301,5305 ----
        t++;
        temp2 = savestring (t);
!       temp1 = expand_arith_string (temp2, Q_DOUBLE_QUOTES);
        free (temp2);
        t[-1] = ':';
***************
*** 6436,6440 ****
  
  	  /* Expand variables found inside the expression. */
! 	  temp1 = expand_string_if_necessary (temp2, Q_DOUBLE_QUOTES, expand_string);
  	  free (temp2);
  
--- 6443,6447 ----
  
  	  /* Expand variables found inside the expression. */
! 	  temp1 = expand_arith_string (temp2, Q_DOUBLE_QUOTES);
  	  free (temp2);
  
***************
*** 6478,6482 ****
  
         /* Do initial variable expansion. */
!       temp1 = expand_string_if_necessary (temp, Q_DOUBLE_QUOTES, expand_string);
  
        goto arithsub;
--- 6485,6489 ----
  
         /* Do initial variable expansion. */
!       temp1 = expand_arith_string (temp, Q_DOUBLE_QUOTES);
  
        goto arithsub;
*** bash-3.1/subst.h	Sun Nov  7 15:12:28 2004
--- bash-3.1/subst.h	Mon Mar 27 09:10:38 2006
***************
*** 152,155 ****
--- 152,158 ----
  extern char *expand_assignment_string_to_string __P((char *, int));
  
+ /* Expand an arithmetic expression string */
+ extern char *expand_arith_string __P((char *, int));
+ 
  /* De-quoted quoted characters in STRING. */
  extern char *dequote_string __P((char *));
*** ../bash-3.1-patched/arrayfunc.c	Mon Jul  4 20:25:58 2005
--- arrayfunc.c	Mon Mar 27 09:10:47 2006
***************
*** 593,601 ****
    strncpy (exp, s, len - 1);
    exp[len - 1] = '\0';
! #if 0
!   t = expand_string_to_string (exp, 0);
! #else 
!   t = expand_string_to_string (exp, Q_DOUBLE_QUOTES);
! #endif
    this_command_name = (char *)NULL;
    val = evalexp (t, &expok);
--- 591,595 ----
    strncpy (exp, s, len - 1);
    exp[len - 1] = '\0';
!   t = expand_arith_string (exp, 0);
    this_command_name = (char *)NULL;
    val = evalexp (t, &expok);
*** bash-3.1/patchlevel.h	Wed Jul 20 13:58:20 2005
--- bash-3.1/patchlevel.h	Wed Dec  7 13:48:42 2005
***************
*** 26,30 ****
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 16
  
  #endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 17
  
  #endif /* _PATCHLEVEL_H_ */