bash: update to 5.0.003.
This commit is contained in:
parent
84e420a892
commit
640d820fe1
|
@ -0,0 +1,239 @@
|
|||
BASH PATCH REPORT
|
||||
=================
|
||||
|
||||
Bash-Release: 5.0
|
||||
Patch-ID: bash50-003
|
||||
|
||||
Bug-Reported-by: Andrew Church <achurch+bash@achurch.org>
|
||||
Bug-Reference-ID: <5c534aa2.04371@msgid.achurch.org>
|
||||
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2019-01/msg00276.html
|
||||
|
||||
Bug-Description:
|
||||
|
||||
There are several incompatibilities in how bash-5.0 processes pathname
|
||||
expansion (globbing) of filename arguments that have backslashes in the
|
||||
directory portion.
|
||||
|
||||
Patch (apply with `patch -p0'):
|
||||
|
||||
*** ../bash-5.0-patched/lib/glob/glob_loop.c 2019-01-16 16:13:21.000000000 -0500
|
||||
--- lib/glob/glob_loop.c 2019-02-01 09:45:11.000000000 -0500
|
||||
***************
|
||||
*** 27,34 ****
|
||||
register const GCHAR *p;
|
||||
register GCHAR c;
|
||||
! int bopen;
|
||||
|
||||
p = pattern;
|
||||
! bopen = 0;
|
||||
|
||||
while ((c = *p++) != L('\0'))
|
||||
--- 27,34 ----
|
||||
register const GCHAR *p;
|
||||
register GCHAR c;
|
||||
! int bopen, bsquote;
|
||||
|
||||
p = pattern;
|
||||
! bopen = bsquote = 0;
|
||||
|
||||
while ((c = *p++) != L('\0'))
|
||||
***************
|
||||
*** 56,66 ****
|
||||
case L('\\'):
|
||||
/* 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,
|
||||
! since the matching engine uses backslash as an escape character
|
||||
! and it can be removed. */
|
||||
! return (*p != L('\0'));
|
||||
}
|
||||
|
||||
! return 0;
|
||||
}
|
||||
|
||||
--- 56,75 ----
|
||||
case L('\\'):
|
||||
/* Don't let the pattern end in a backslash (GMATCH returns no match
|
||||
! if the pattern ends in a backslash anyway), but otherwise note that
|
||||
! we have seen this, since the matching engine uses backslash as an
|
||||
! escape character and it can be removed. We return 2 later if we
|
||||
! have seen only backslash-escaped characters, so interested callers
|
||||
! know they can shortcut and just dequote the pathname. */
|
||||
! if (*p != L('\0'))
|
||||
! {
|
||||
! p++;
|
||||
! bsquote = 1;
|
||||
! continue;
|
||||
! }
|
||||
! else /* (*p == L('\0')) */
|
||||
! return 0;
|
||||
}
|
||||
|
||||
! return bsquote ? 2 : 0;
|
||||
}
|
||||
|
||||
*** ../bash-5.0-patched/lib/glob/glob.h 2013-10-28 14:46:12.000000000 -0400
|
||||
--- lib/glob/glob.h 2019-03-07 11:06:47.000000000 -0500
|
||||
***************
|
||||
*** 31,34 ****
|
||||
--- 31,35 ----
|
||||
#define GX_ADDCURDIR 0x200 /* internal -- add passed directory name */
|
||||
#define GX_GLOBSTAR 0x400 /* turn on special handling of ** */
|
||||
+ #define GX_RECURSE 0x800 /* internal -- glob_filename called recursively */
|
||||
|
||||
extern int glob_pattern_p __P((const char *));
|
||||
*** ../bash-5.0-patched/lib/glob/glob.c 2018-09-20 10:53:23.000000000 -0400
|
||||
--- lib/glob/glob.c 2019-03-07 14:23:43.000000000 -0500
|
||||
***************
|
||||
*** 1062,1066 ****
|
||||
unsigned int directory_len;
|
||||
int free_dirname; /* flag */
|
||||
! int dflags;
|
||||
|
||||
result = (char **) malloc (sizeof (char *));
|
||||
--- 1078,1082 ----
|
||||
unsigned int directory_len;
|
||||
int free_dirname; /* flag */
|
||||
! int dflags, hasglob;
|
||||
|
||||
result = (char **) malloc (sizeof (char *));
|
||||
***************
|
||||
*** 1111,1117 ****
|
||||
}
|
||||
|
||||
/* If directory_name contains globbing characters, then we
|
||||
! have to expand the previous levels. Just recurse. */
|
||||
! if (directory_len > 0 && glob_pattern_p (directory_name))
|
||||
{
|
||||
char **directories, *d, *p;
|
||||
--- 1127,1136 ----
|
||||
}
|
||||
|
||||
+ hasglob = 0;
|
||||
/* If directory_name contains globbing characters, then we
|
||||
! have to expand the previous levels. Just recurse.
|
||||
! If glob_pattern_p returns != [0,1] we have a pattern that has backslash
|
||||
! quotes but no unquoted glob pattern characters. We dequote it below. */
|
||||
! if (directory_len > 0 && (hasglob = glob_pattern_p (directory_name)) == 1)
|
||||
{
|
||||
char **directories, *d, *p;
|
||||
***************
|
||||
*** 1176,1180 ****
|
||||
d[directory_len - 1] = '\0';
|
||||
|
||||
! directories = glob_filename (d, dflags);
|
||||
|
||||
if (free_dirname)
|
||||
--- 1195,1199 ----
|
||||
d[directory_len - 1] = '\0';
|
||||
|
||||
! directories = glob_filename (d, dflags|GX_RECURSE);
|
||||
|
||||
if (free_dirname)
|
||||
***************
|
||||
*** 1333,1336 ****
|
||||
--- 1352,1369 ----
|
||||
return (NULL);
|
||||
}
|
||||
+ /* If we have a directory name with quoted characters, and we are
|
||||
+ being called recursively to glob the directory portion of a pathname,
|
||||
+ we need to dequote the directory name before returning it so the
|
||||
+ caller can read the directory */
|
||||
+ if (directory_len > 0 && hasglob == 2 && (flags & GX_RECURSE) != 0)
|
||||
+ {
|
||||
+ dequote_pathname (directory_name);
|
||||
+ directory_len = strlen (directory_name);
|
||||
+ }
|
||||
+
|
||||
+ /* We could check whether or not the dequoted directory_name is a
|
||||
+ directory and return it here, returning the original directory_name
|
||||
+ if not, but we don't do that yet. I'm not sure it matters. */
|
||||
+
|
||||
/* Handle GX_MARKDIRS here. */
|
||||
result[0] = (char *) malloc (directory_len + 1);
|
||||
*** ../bash-5.0-patched/pathexp.c 2018-04-29 17:44:48.000000000 -0400
|
||||
--- pathexp.c 2019-01-31 20:19:41.000000000 -0500
|
||||
***************
|
||||
*** 66,74 ****
|
||||
register int c;
|
||||
char *send;
|
||||
! int open;
|
||||
|
||||
DECLARE_MBSTATE;
|
||||
|
||||
! open = 0;
|
||||
send = string + strlen (string);
|
||||
|
||||
--- 66,74 ----
|
||||
register int c;
|
||||
char *send;
|
||||
! int open, bsquote;
|
||||
|
||||
DECLARE_MBSTATE;
|
||||
|
||||
! open = bsquote = 0;
|
||||
send = string + strlen (string);
|
||||
|
||||
***************
|
||||
*** 101,105 ****
|
||||
globbing. */
|
||||
case '\\':
|
||||
! return (*string != 0);
|
||||
|
||||
case CTLESC:
|
||||
--- 101,112 ----
|
||||
globbing. */
|
||||
case '\\':
|
||||
! if (*string != '\0' && *string != '/')
|
||||
! {
|
||||
! bsquote = 1;
|
||||
! string++;
|
||||
! continue;
|
||||
! }
|
||||
! else if (*string == 0)
|
||||
! return (0);
|
||||
|
||||
case CTLESC:
|
||||
***************
|
||||
*** 118,122 ****
|
||||
#endif
|
||||
}
|
||||
! return (0);
|
||||
}
|
||||
|
||||
--- 125,130 ----
|
||||
#endif
|
||||
}
|
||||
!
|
||||
! return (bsquote ? 2 : 0);
|
||||
}
|
||||
|
||||
*** ../bash-5.0-patched/bashline.c 2019-01-16 16:13:21.000000000 -0500
|
||||
--- bashline.c 2019-02-22 09:29:08.000000000 -0500
|
||||
***************
|
||||
*** 3753,3757 ****
|
||||
|
||||
case '\\':
|
||||
! if (*string == 0)
|
||||
return (0);
|
||||
}
|
||||
--- 3766,3770 ----
|
||||
|
||||
case '\\':
|
||||
! if (*string++ == 0)
|
||||
return (0);
|
||||
}
|
||||
*** ../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 2
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
--- 26,30 ----
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
! #define PATCHLEVEL 3
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
|
@ -1,7 +1,7 @@
|
|||
# Template file for 'bash'
|
||||
pkgname=bash
|
||||
_bash_distver=5.0
|
||||
_bash_patchlevel=002
|
||||
_bash_patchlevel=003
|
||||
version="${_bash_distver}.${_bash_patchlevel}"
|
||||
revision=1
|
||||
wrksrc="${pkgname}-${_bash_distver}"
|
||||
|
@ -10,21 +10,23 @@ configure_args="--without-bash-malloc --with-curses --without-installed-readline
|
|||
make_build_args="TERMCAP_LIB=${XBPS_CROSS_BASE}/usr/lib/libncursesw.a"
|
||||
hostmakedepends="bison"
|
||||
makedepends="ncurses-devel"
|
||||
conflicts="chroot-bash>=0"
|
||||
register_shell=/bin/bash
|
||||
short_desc="GNU Bourne Again Shell"
|
||||
maintainer="Juan RP <xtraeme@voidlinux.org>"
|
||||
license="GPL-3.0-or-later"
|
||||
homepage="https://www.gnu.org/software/bash/bash.html"
|
||||
distfiles="${GNU_SITE}/${pkgname}/${pkgname}-${_bash_distver}.tar.gz"
|
||||
CFLAGS="-DSYS_BASHRC='\"/etc/bash/bashrc\"'"
|
||||
make_dirs="/etc/bash/bashrc.d 755 root root"
|
||||
checksum=b4a80f2ac66170b2913efbfb9f2594f1f76c7b1afd11f799e22035d63077fb4d
|
||||
|
||||
conflicts="chroot-bash>=0"
|
||||
register_shell=/bin/bash
|
||||
|
||||
alternatives="
|
||||
sh:sh:/usr/bin/bash
|
||||
sh:sh.1:/usr/share/man/man1/bash.1"
|
||||
|
||||
CFLAGS="-DSYS_BASHRC='\"/etc/bash/bashrc\"'"
|
||||
|
||||
pre_configure() {
|
||||
local ver=$(echo ${_bash_distver}|sed "s|\.||g")
|
||||
|
||||
|
|
Loading…
Reference in New Issue