You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							166 lines
						
					
					
						
							4.0 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							166 lines
						
					
					
						
							4.0 KiB
						
					
					
				
											     BASH PATCH REPORT
							 | 
						|
											     =================
							 | 
						|
								
							 | 
						|
								Bash-Release:	5.0
							 | 
						|
								Patch-ID:	bash50-001
							 | 
						|
								
							 | 
						|
								Bug-Reported-by:	axel@freakout.de
							 | 
						|
								Bug-Reference-ID:	<201901082050.x08KoShS006731@bongo.freakout.de>
							 | 
						|
								Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2019-01/msg00079.html
							 | 
						|
								
							 | 
						|
								Bug-Description:
							 | 
						|
								
							 | 
						|
								Under certain circumstances, the glob expansion code did not remove
							 | 
						|
								backslashes escaping characters in directory names (or portions of a
							 | 
						|
								pattern preceding a slash).
							 | 
						|
								
							 | 
						|
								Patch (apply with `patch -p0'):
							 | 
						|
								
							 | 
						|
								*** ../bash-5.0/bashline.c	2018-11-27 13:20:16.000000000 -0500
							 | 
						|
								--- bashline.c	2019-01-16 16:06:03.000000000 -0500
							 | 
						|
								***************
							 | 
						|
								*** 232,235 ****
							 | 
						|
								--- 232,236 ----
							 | 
						|
								  static int bash_possible_command_completions __P((int, int));
							 | 
						|
								  
							 | 
						|
								+ static int completion_glob_pattern __P((char *));
							 | 
						|
								  static char *glob_complete_word __P((const char *, int));
							 | 
						|
								  static int bash_glob_completion_internal __P((int));
							 | 
						|
								***************
							 | 
						|
								*** 1742,1746 ****
							 | 
						|
								    /* This could be a globbing pattern, so try to expand it using pathname
							 | 
						|
								       expansion. */
							 | 
						|
								!   if (!matches && glob_pattern_p (text))
							 | 
						|
								      {
							 | 
						|
								        matches = rl_completion_matches (text, glob_complete_word);
							 | 
						|
								--- 1743,1747 ----
							 | 
						|
								    /* This could be a globbing pattern, so try to expand it using pathname
							 | 
						|
								       expansion. */
							 | 
						|
								!   if (!matches && completion_glob_pattern ((char *)text))
							 | 
						|
								      {
							 | 
						|
								        matches = rl_completion_matches (text, glob_complete_word);
							 | 
						|
								***************
							 | 
						|
								*** 1851,1855 ****
							 | 
						|
								  	}
							 | 
						|
								  
							 | 
						|
								!       globpat = glob_pattern_p (hint_text);
							 | 
						|
								  
							 | 
						|
								        /* If this is an absolute program name, do not check it against
							 | 
						|
								--- 1852,1856 ----
							 | 
						|
								  	}
							 | 
						|
								  
							 | 
						|
								!       globpat = completion_glob_pattern ((char *)hint_text);
							 | 
						|
								  
							 | 
						|
								        /* If this is an absolute program name, do not check it against
							 | 
						|
								***************
							 | 
						|
								*** 3714,3717 ****
							 | 
						|
								--- 3715,3773 ----
							 | 
						|
								  }
							 | 
						|
								  
							 | 
						|
								+ static int
							 | 
						|
								+ completion_glob_pattern (string)
							 | 
						|
								+      char *string;
							 | 
						|
								+ {
							 | 
						|
								+   register int c;
							 | 
						|
								+   char *send;
							 | 
						|
								+   int open;
							 | 
						|
								+ 
							 | 
						|
								+   DECLARE_MBSTATE;
							 | 
						|
								+ 
							 | 
						|
								+   open = 0;
							 | 
						|
								+   send = string + strlen (string);
							 | 
						|
								+ 
							 | 
						|
								+   while (c = *string++)
							 | 
						|
								+     {
							 | 
						|
								+       switch (c)
							 | 
						|
								+ 	{
							 | 
						|
								+ 	case '?':
							 | 
						|
								+ 	case '*':
							 | 
						|
								+ 	  return (1);
							 | 
						|
								+ 
							 | 
						|
								+ 	case '[':
							 | 
						|
								+ 	  open++;
							 | 
						|
								+ 	  continue;
							 | 
						|
								+ 
							 | 
						|
								+ 	case ']':
							 | 
						|
								+ 	  if (open)
							 | 
						|
								+ 	    return (1);
							 | 
						|
								+ 	  continue;
							 | 
						|
								+ 
							 | 
						|
								+ 	case '+':
							 | 
						|
								+ 	case '@':
							 | 
						|
								+ 	case '!':
							 | 
						|
								+ 	  if (*string == '(')	/*)*/
							 | 
						|
								+ 	    return (1);
							 | 
						|
								+ 	  continue;
							 | 
						|
								+ 
							 | 
						|
								+ 	case '\\':
							 | 
						|
								+ 	  if (*string == 0)
							 | 
						|
								+ 	    return (0);	 	  
							 | 
						|
								+ 	}
							 | 
						|
								+ 
							 | 
						|
								+       /* Advance one fewer byte than an entire multibyte character to
							 | 
						|
								+ 	 account for the auto-increment in the loop above. */
							 | 
						|
								+ #ifdef HANDLE_MULTIBYTE
							 | 
						|
								+       string--;
							 | 
						|
								+       ADVANCE_CHAR_P (string, send - string);
							 | 
						|
								+       string++;
							 | 
						|
								+ #else
							 | 
						|
								+       ADVANCE_CHAR_P (string, send - string);
							 | 
						|
								+ #endif
							 | 
						|
								+     }
							 | 
						|
								+   return (0);
							 | 
						|
								+ }
							 | 
						|
								+ 
							 | 
						|
								  static char *globtext;
							 | 
						|
								  static char *globorig;
							 | 
						|
								***************
							 | 
						|
								*** 3878,3882 ****
							 | 
						|
								      }      
							 | 
						|
								  
							 | 
						|
								!   if (t && glob_pattern_p (t) == 0)
							 | 
						|
								      rl_explicit_arg = 1;	/* XXX - force glob_complete_word to append `*' */
							 | 
						|
								    FREE (t);
							 | 
						|
								--- 3934,3938 ----
							 | 
						|
								      }      
							 | 
						|
								  
							 | 
						|
								!   if (t && completion_glob_pattern (t) == 0)
							 | 
						|
								      rl_explicit_arg = 1;	/* XXX - force glob_complete_word to append `*' */
							 | 
						|
								    FREE (t);
							 | 
						|
								*** ../bash-5.0/lib/glob/glob_loop.c	2018-12-31 13:35:15.000000000 -0500
							 | 
						|
								--- lib/glob/glob_loop.c	2019-01-09 09:44:36.000000000 -0500
							 | 
						|
								***************
							 | 
						|
								*** 55,59 ****
							 | 
						|
								  
							 | 
						|
								        case L('\\'):
							 | 
						|
								- #if 0
							 | 
						|
								  	/* Don't let the pattern end in a backslash (GMATCH returns no match
							 | 
						|
								  	   if the pattern ends in a backslash anyway), but otherwise return 1,
							 | 
						|
								--- 55,58 ----
							 | 
						|
								***************
							 | 
						|
								*** 61,69 ****
							 | 
						|
								  	   and it can be removed. */
							 | 
						|
								  	return (*p != L('\0'));
							 | 
						|
								- #else
							 | 
						|
								- 	/* The pattern may not end with a backslash. */
							 | 
						|
								- 	if (*p++ == L('\0'))
							 | 
						|
								- 	  return 0;
							 | 
						|
								- #endif
							 | 
						|
								        }
							 | 
						|
								  
							 | 
						|
								--- 60,63 ----
							 | 
						|
								*** ../bash-5.0/patchlevel.h	2016-06-22 14:51:03.000000000 -0400
							 | 
						|
								--- patchlevel.h	2016-10-01 11:01:28.000000000 -0400
							 | 
						|
								***************
							 | 
						|
								*** 26,30 ****
							 | 
						|
								     looks for to find the patch level (for the sccs version string). */
							 | 
						|
								  
							 | 
						|
								! #define PATCHLEVEL 0
							 | 
						|
								  
							 | 
						|
								  #endif /* _PATCHLEVEL_H_ */
							 | 
						|
								--- 26,30 ----
							 | 
						|
								     looks for to find the patch level (for the sccs version string). */
							 | 
						|
								  
							 | 
						|
								! #define PATCHLEVEL 1
							 | 
						|
								  
							 | 
						|
								  #endif /* _PATCHLEVEL_H_ */
							 | 
						|
								
							 |