Patchlevel 5, some fixes in old patches, some cleanup
Signed-off-by: Roman Rakus <rrakus@redhat.com>
This commit is contained in:
parent
08a3cd6996
commit
1680d49ad0
99
bash-4.2-coverity.patch
Normal file
99
bash-4.2-coverity.patch
Normal file
@ -0,0 +1,99 @@
|
||||
diff -up bash-4.2/execute_cmd.c.coverity bash-4.2/execute_cmd.c
|
||||
--- bash-4.2/execute_cmd.c.coverity 2011-02-24 13:04:35.000000000 +0100
|
||||
+++ bash-4.2/execute_cmd.c 2011-02-24 13:49:13.000000000 +0100
|
||||
@@ -5036,7 +5036,7 @@ shell_execve (command, args, env)
|
||||
Elf32_Ehdr ehdr;
|
||||
Elf32_Phdr *phdr;
|
||||
Elf32_Shdr *shdr;
|
||||
- int nphdr, nshdr;
|
||||
+ Elf32_Half nphdr, nshdr;
|
||||
|
||||
/* We have to copy the data since the sample buffer
|
||||
might not be aligned correctly to be accessed as
|
||||
@@ -5044,12 +5044,12 @@ shell_execve (command, args, env)
|
||||
memcpy (&ehdr, sample, sizeof (Elf32_Ehdr));
|
||||
|
||||
nshdr = ehdr.e_shnum;
|
||||
- shdr = (Elf32_Shdr *) malloc (nshdr * ehdr.e_shentsize);
|
||||
+ shdr = (Elf32_Shdr *) malloc ((size_t)nshdr * (size_t)ehdr.e_shentsize);
|
||||
|
||||
if (shdr != NULL)
|
||||
{
|
||||
#ifdef HAVE_PREAD
|
||||
- sample_len = pread (fd, shdr, nshdr * ehdr.e_shentsize,
|
||||
+ sample_len = pread (fd, shdr, (size_t)nshdr * (size_t)ehdr.e_shentsize,
|
||||
ehdr.e_shoff);
|
||||
#else
|
||||
if (lseek (fd, ehdr.e_shoff, SEEK_SET) != -1)
|
||||
@@ -5091,11 +5091,11 @@ shell_execve (command, args, env)
|
||||
}
|
||||
|
||||
nphdr = ehdr.e_phnum;
|
||||
- phdr = (Elf32_Phdr *) malloc (nphdr * ehdr.e_phentsize);
|
||||
+ phdr = (Elf32_Phdr *) malloc ((size_t)nphdr * (size_t)ehdr.e_phentsize);
|
||||
if (phdr != NULL)
|
||||
{
|
||||
#ifdef HAVE_PREAD
|
||||
- sample_len = pread (fd, phdr, nphdr * ehdr.e_phentsize,
|
||||
+ sample_len = pread (fd, phdr, (size_t)nphdr * (size_t)ehdr.e_phentsize,
|
||||
ehdr.e_phoff);
|
||||
#else
|
||||
if (lseek (fd, ehdr.e_phoff, SEEK_SET) != -1)
|
||||
@@ -5120,7 +5120,7 @@ shell_execve (command, args, env)
|
||||
Elf64_Ehdr ehdr;
|
||||
Elf64_Phdr *phdr;
|
||||
Elf64_Shdr *shdr;
|
||||
- int nphdr, nshdr;
|
||||
+ Elf32_Half nphdr, nshdr;
|
||||
|
||||
/* We have to copy the data since the sample buffer
|
||||
might not be aligned correctly to be accessed as
|
||||
@@ -5128,11 +5128,11 @@ shell_execve (command, args, env)
|
||||
memcpy (&ehdr, sample, sizeof (Elf64_Ehdr));
|
||||
|
||||
nshdr = ehdr.e_shnum;
|
||||
- shdr = (Elf64_Shdr *) malloc (nshdr * ehdr.e_shentsize);
|
||||
+ shdr = (Elf64_Shdr *) malloc ((size_t)nshdr * (size_t)ehdr.e_shentsize);
|
||||
if (shdr != NULL)
|
||||
{
|
||||
#ifdef HAVE_PREAD
|
||||
- sample_len = pread (fd, shdr, nshdr * ehdr.e_shentsize,
|
||||
+ sample_len = pread (fd, shdr, (size_t)nshdr * (size_t)ehdr.e_shentsize,
|
||||
ehdr.e_shoff);
|
||||
#else
|
||||
if (lseek (fd, ehdr.e_shoff, SEEK_SET) != -1)
|
||||
@@ -5174,11 +5174,11 @@ shell_execve (command, args, env)
|
||||
}
|
||||
|
||||
nphdr = ehdr.e_phnum;
|
||||
- phdr = (Elf64_Phdr *) malloc (nphdr * ehdr.e_phentsize);
|
||||
+ phdr = (Elf64_Phdr *) malloc ((size_t)nphdr * (size_t)ehdr.e_phentsize);
|
||||
if (phdr != NULL)
|
||||
{
|
||||
#ifdef HAVE_PREAD
|
||||
- sample_len = pread (fd, phdr, nphdr * ehdr.e_phentsize,
|
||||
+ sample_len = pread (fd, phdr, (size_t)nphdr * (size_t)ehdr.e_phentsize,
|
||||
ehdr.e_phoff);
|
||||
#else
|
||||
if (lseek (fd, ehdr.e_phoff, SEEK_SET) != -1)
|
||||
@@ -5200,8 +5200,8 @@ shell_execve (command, args, env)
|
||||
|
||||
if (offset != -1)
|
||||
{
|
||||
- size_t maxlen = 0;
|
||||
- size_t actlen = 0;
|
||||
+ ssize_t maxlen = 0;
|
||||
+ ssize_t actlen = 0;
|
||||
char *interp = NULL;
|
||||
|
||||
do
|
||||
@@ -5250,7 +5250,8 @@ shell_execve (command, args, env)
|
||||
}
|
||||
#endif
|
||||
#if defined (HAVE_HASH_BANG_EXEC) || defined (HAVE_ELF_H)
|
||||
- close (fd);
|
||||
+ if (fd >= 0)
|
||||
+ close (fd);
|
||||
#endif
|
||||
errno = i;
|
||||
file_error (command);
|
69
bash.spec
69
bash.spec
@ -1,12 +1,12 @@
|
||||
#% define beta_tag rc2
|
||||
%define patchleveltag .0
|
||||
%define patchleveltag .5
|
||||
%define baseversion 4.2
|
||||
%bcond_without tests
|
||||
|
||||
Version: %{baseversion}%{patchleveltag}
|
||||
Name: bash
|
||||
Summary: The GNU Bourne Again shell
|
||||
Release: 2%{?dist}
|
||||
Release: 1%{?dist}
|
||||
Group: System Environment/Shells
|
||||
License: GPLv3+
|
||||
Url: http://www.gnu.org/software/bash
|
||||
@ -20,7 +20,11 @@ Source2: dot-bash_profile
|
||||
Source3: dot-bash_logout
|
||||
|
||||
# Official upstream patches
|
||||
# none yet
|
||||
Patch001: ftp://ftp.gnu.org/pub/gnu/bash/bash-4.2-patches/bash42-001
|
||||
Patch002: ftp://ftp.gnu.org/pub/gnu/bash/bash-4.2-patches/bash42-002
|
||||
Patch003: ftp://ftp.gnu.org/pub/gnu/bash/bash-4.2-patches/bash42-003
|
||||
Patch004: ftp://ftp.gnu.org/pub/gnu/bash/bash-4.2-patches/bash42-004
|
||||
Patch005: ftp://ftp.gnu.org/pub/gnu/bash/bash-4.2-patches/bash42-005
|
||||
|
||||
# Other patches
|
||||
Patch101: bash-2.02-security.patch
|
||||
@ -33,30 +37,28 @@ Patch107: bash-2.05b-pgrp_sync.patch
|
||||
Patch108: bash-2.05b-readline-oom.patch
|
||||
Patch109: bash-2.05b-xcc.patch
|
||||
Patch110: bash-3.2-audit.patch
|
||||
Patch112: bash-3.2-ssh_source_bash.patch
|
||||
Patch113: bash-bashbug.patch
|
||||
Patch115: bash-infotags.patch
|
||||
Patch116: bash-requires.patch
|
||||
Patch117: bash-setlocale.patch
|
||||
Patch118: bash-tty-tests.patch
|
||||
|
||||
Patch111: bash-3.2-ssh_source_bash.patch
|
||||
Patch112: bash-bashbug.patch
|
||||
Patch113: bash-infotags.patch
|
||||
Patch114: bash-requires.patch
|
||||
Patch115: bash-setlocale.patch
|
||||
Patch116: bash-tty-tests.patch
|
||||
|
||||
# 484809, check if interp section is NOBITS
|
||||
Patch123: bash-4.0-nobits.patch
|
||||
Patch117: bash-4.0-nobits.patch
|
||||
|
||||
# Do the same CFLAGS in generated Makefile in examples
|
||||
Patch124: bash-4.1-examples.patch
|
||||
Patch118: bash-4.1-examples.patch
|
||||
|
||||
# Builtins like echo and printf won't report errors
|
||||
# when output does not succeed due to EPIPE
|
||||
Patch126: bash-4.1-broken_pipe.patch
|
||||
Patch119: bash-4.1-broken_pipe.patch
|
||||
|
||||
# Enable system-wide .bash_logout for login shells
|
||||
Patch127: bash-4.2-rc2-logout.patch
|
||||
Patch120: bash-4.2-rc2-logout.patch
|
||||
|
||||
# Patch from upstream, some pattern matching glitch
|
||||
# See http://lists.gnu.org/archive/html/bug-bash/2011-02/msg00136.html
|
||||
Patch128: patmatch.patch
|
||||
# Static analyzis shows some issues in bash-2.05a-interpreter.patch
|
||||
Patch121: bash-4.2-coverity.patch
|
||||
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||
|
||||
@ -85,7 +87,11 @@ This package contains documentation files for %{name}.
|
||||
%setup -q -n %{name}-%{baseversion}
|
||||
|
||||
# Official upstream patches
|
||||
# none yet
|
||||
%patch001 -p0 -b .001
|
||||
%patch002 -p0 -b .002
|
||||
%patch003 -p0 -b .003
|
||||
%patch004 -p0 -b .004
|
||||
%patch005 -p0 -b .005
|
||||
|
||||
# Other patches
|
||||
%patch101 -p1 -b .security
|
||||
@ -98,17 +104,17 @@ This package contains documentation files for %{name}.
|
||||
%patch108 -p1 -b .readline_oom
|
||||
%patch109 -p1 -b .xcc
|
||||
%patch110 -p1 -b .audit
|
||||
%patch112 -p1 -b .ssh_source_bash
|
||||
%patch113 -p1 -b .bashbug
|
||||
%patch115 -p1 -b .infotags
|
||||
%patch116 -p1 -b .requires
|
||||
%patch117 -p1 -b .setlocale
|
||||
%patch118 -p1 -b .tty_tests
|
||||
%patch123 -p1 -b .nobits
|
||||
%patch124 -p1 -b .examples
|
||||
%patch126 -p1 -b .broken_pipe
|
||||
%patch127 -p1 -b .logout
|
||||
%patch128 -p0 -b .patmatch
|
||||
%patch111 -p1 -b .ssh_source_bash
|
||||
%patch112 -p1 -b .bashbug
|
||||
%patch113 -p1 -b .infotags
|
||||
%patch114 -p1 -b .requires
|
||||
%patch115 -p1 -b .setlocale
|
||||
%patch116 -p1 -b .tty_tests
|
||||
%patch117 -p1 -b .nobits
|
||||
%patch118 -p1 -b .examples
|
||||
%patch119 -p1 -b .broken_pipe
|
||||
%patch120 -p1 -b .logout
|
||||
%patch121 -p1 -b .coverity
|
||||
|
||||
echo %{version} > _distribution
|
||||
echo %{release} > _patchlevel
|
||||
@ -287,6 +293,11 @@ fi
|
||||
#%doc doc/*.ps doc/*.0 doc/*.html doc/article.txt
|
||||
|
||||
%changelog
|
||||
* Tue Mar 01 2011 Roman Rakus <rrakus@redhat.com> - 4.2.5-1
|
||||
- Patchlevel 5
|
||||
- Static analyzis show some issues in some patches
|
||||
- Some cleanup
|
||||
|
||||
* Wed Feb 16 2011 Roman Rakus <rrakus@redhat.com> - 4.2.0-2
|
||||
- pattern matching glitch, patch from upstream
|
||||
|
||||
|
78
bash42-001
Normal file
78
bash42-001
Normal file
@ -0,0 +1,78 @@
|
||||
BASH PATCH REPORT
|
||||
=================
|
||||
|
||||
Bash-Release: 4.2
|
||||
Patch-ID: bash42-001
|
||||
|
||||
Bug-Reported-by: Juergen Daubert <jue@jue.li>
|
||||
Bug-Reference-ID: <20110214175132.GA19813@jue.netz>
|
||||
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2011-02/msg00125.html
|
||||
|
||||
Bug-Description:
|
||||
|
||||
When running in Posix mode, bash does not correctly expand the right-hand
|
||||
side of a double-quoted word expansion containing single quotes.
|
||||
|
||||
Patch (apply with `patch -p0'):
|
||||
|
||||
*** ../bash-4.2-patched/subst.c 2011-01-02 16:12:51.000000000 -0500
|
||||
--- subst.c 2011-02-19 00:00:00.000000000 -0500
|
||||
***************
|
||||
*** 1380,1387 ****
|
||||
|
||||
/* The handling of dolbrace_state needs to agree with the code in parse.y:
|
||||
! parse_matched_pair() */
|
||||
! dolbrace_state = 0;
|
||||
! if (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES))
|
||||
! dolbrace_state = (flags & SX_POSIXEXP) ? DOLBRACE_QUOTE : DOLBRACE_PARAM;
|
||||
|
||||
i = *sindex;
|
||||
--- 1380,1389 ----
|
||||
|
||||
/* The handling of dolbrace_state needs to agree with the code in parse.y:
|
||||
! parse_matched_pair(). The different initial value is to handle the
|
||||
! case where this function is called to parse the word in
|
||||
! ${param op word} (SX_WORD). */
|
||||
! dolbrace_state = (flags & SX_WORD) ? DOLBRACE_WORD : DOLBRACE_PARAM;
|
||||
! if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && (flags & SX_POSIXEXP))
|
||||
! dolbrace_state = DOLBRACE_QUOTE;
|
||||
|
||||
i = *sindex;
|
||||
***************
|
||||
*** 7177,7181 ****
|
||||
/* Extract the contents of the ${ ... } expansion
|
||||
according to the Posix.2 rules. */
|
||||
! value = extract_dollar_brace_string (string, &sindex, quoted, (c == '%' || c == '#') ? SX_POSIXEXP : 0);
|
||||
if (string[sindex] == RBRACE)
|
||||
sindex++;
|
||||
--- 7181,7185 ----
|
||||
/* Extract the contents of the ${ ... } expansion
|
||||
according to the Posix.2 rules. */
|
||||
! value = extract_dollar_brace_string (string, &sindex, quoted, (c == '%' || c == '#' || c =='/' || c == '^' || c == ',' || c ==':') ? SX_POSIXEXP|SX_WORD : SX_WORD);
|
||||
if (string[sindex] == RBRACE)
|
||||
sindex++;
|
||||
*** ../bash-4.2-patched/subst.h 2010-12-02 20:21:29.000000000 -0500
|
||||
--- subst.h 2011-02-16 21:12:09.000000000 -0500
|
||||
***************
|
||||
*** 57,60 ****
|
||||
--- 57,61 ----
|
||||
#define SX_ARITHSUB 0x0080 /* extracting $(( ... )) (currently unused) */
|
||||
#define SX_POSIXEXP 0x0100 /* extracting new Posix pattern removal expansions in extract_dollar_brace_string */
|
||||
+ #define SX_WORD 0x0200 /* extracting word in ${param op word} */
|
||||
|
||||
/* Remove backslashes which are quoting backquotes from STRING. Modifies
|
||||
*** ../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 0
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
--- 26,30 ----
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
! #define PATCHLEVEL 1
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
60
bash42-002
Normal file
60
bash42-002
Normal file
@ -0,0 +1,60 @@
|
||||
BASH PATCH REPORT
|
||||
=================
|
||||
|
||||
Bash-Release: 4.2
|
||||
Patch-ID: bash42-002
|
||||
|
||||
Bug-Reported-by: Clark J. Wang <dearvoid@gmail.com>
|
||||
Bug-Reference-ID: <AANLkTimGbW7aC4E5infXP6ku5WPci4t=xVc+L1SyHqrD@mail.gmail.com>
|
||||
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2011-02/msg00157.html
|
||||
|
||||
Bug-Description:
|
||||
|
||||
The readline vi-mode `cc', `dd', and `yy' commands failed to modify the
|
||||
entire line.
|
||||
|
||||
Patch (apply with `patch -p0'):
|
||||
|
||||
*** ../bash-4.2-patched/lib/readline/vi_mode.c 2010-11-20 19:51:39.000000000 -0500
|
||||
--- lib/readline/vi_mode.c 2011-02-17 20:24:25.000000000 -0500
|
||||
***************
|
||||
*** 1115,1119 ****
|
||||
_rl_vi_last_motion = c;
|
||||
RL_UNSETSTATE (RL_STATE_VIMOTION);
|
||||
! return (0);
|
||||
}
|
||||
#if defined (READLINE_CALLBACKS)
|
||||
--- 1115,1119 ----
|
||||
_rl_vi_last_motion = c;
|
||||
RL_UNSETSTATE (RL_STATE_VIMOTION);
|
||||
! return (vidomove_dispatch (m));
|
||||
}
|
||||
#if defined (READLINE_CALLBACKS)
|
||||
*** ../bash-4.2-patched/lib/readline/callback.c 2010-06-06 12:18:58.000000000 -0400
|
||||
--- lib/readline/callback.c 2011-02-17 20:43:28.000000000 -0500
|
||||
***************
|
||||
*** 149,152 ****
|
||||
--- 149,155 ----
|
||||
/* Should handle everything, including cleanup, numeric arguments,
|
||||
and turning off RL_STATE_VIMOTION */
|
||||
+ if (RL_ISSTATE (RL_STATE_NUMERICARG) == 0)
|
||||
+ _rl_internal_char_cleanup ();
|
||||
+
|
||||
return;
|
||||
}
|
||||
*** ../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 1
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
--- 26,30 ----
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
! #define PATCHLEVEL 2
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
|
318
bash42-003
Normal file
318
bash42-003
Normal file
@ -0,0 +1,318 @@
|
||||
BASH PATCH REPORT
|
||||
=================
|
||||
|
||||
Bash-Release: 4.2
|
||||
Patch-ID: bash42-003
|
||||
|
||||
Bug-Reported-by: Clark J. Wang <dearvoid@gmail.com>
|
||||
Bug-Reference-ID: <AANLkTikZ_rVV-frR8Fh0PzhXnMKnm5XsUR-F3qtPPs5G@mail.gmail.com>
|
||||
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2011-02/msg00136.html
|
||||
|
||||
Bug-Description:
|
||||
|
||||
When using the pattern replacement and pattern removal word expansions, bash
|
||||
miscalculates the possible match length in the presence of an unescaped left
|
||||
bracket without a closing right bracket, resulting in a failure to match
|
||||
the pattern.
|
||||
|
||||
Patch (apply with `patch -p0'):
|
||||
|
||||
*** ../bash-4.2-patched/lib/glob/gmisc.c 2011-02-05 16:11:17.000000000 -0500
|
||||
--- lib/glob/gmisc.c 2011-02-18 23:53:42.000000000 -0500
|
||||
***************
|
||||
*** 78,83 ****
|
||||
size_t wmax;
|
||||
{
|
||||
! wchar_t wc, *wbrack;
|
||||
! int matlen, t, in_cclass, in_collsym, in_equiv;
|
||||
|
||||
if (*wpat == 0)
|
||||
--- 78,83 ----
|
||||
size_t wmax;
|
||||
{
|
||||
! wchar_t wc;
|
||||
! int matlen, bracklen, t, in_cclass, in_collsym, in_equiv;
|
||||
|
||||
if (*wpat == 0)
|
||||
***************
|
||||
*** 119,123 ****
|
||||
case L'[':
|
||||
/* scan for ending `]', skipping over embedded [:...:] */
|
||||
! wbrack = wpat;
|
||||
wc = *wpat++;
|
||||
do
|
||||
--- 119,123 ----
|
||||
case L'[':
|
||||
/* scan for ending `]', skipping over embedded [:...:] */
|
||||
! bracklen = 1;
|
||||
wc = *wpat++;
|
||||
do
|
||||
***************
|
||||
*** 125,140 ****
|
||||
if (wc == 0)
|
||||
{
|
||||
! matlen += wpat - wbrack - 1; /* incremented below */
|
||||
! break;
|
||||
}
|
||||
else if (wc == L'\\')
|
||||
{
|
||||
! wc = *wpat++;
|
||||
! if (*wpat == 0)
|
||||
! break;
|
||||
}
|
||||
else if (wc == L'[' && *wpat == L':') /* character class */
|
||||
{
|
||||
wpat++;
|
||||
in_cclass = 1;
|
||||
}
|
||||
--- 125,148 ----
|
||||
if (wc == 0)
|
||||
{
|
||||
! wpat--; /* back up to NUL */
|
||||
! matlen += bracklen;
|
||||
! goto bad_bracket;
|
||||
}
|
||||
else if (wc == L'\\')
|
||||
{
|
||||
! /* *wpat == backslash-escaped character */
|
||||
! bracklen++;
|
||||
! /* If the backslash or backslash-escape ends the string,
|
||||
! bail. The ++wpat skips over the backslash escape */
|
||||
! if (*wpat == 0 || *++wpat == 0)
|
||||
! {
|
||||
! matlen += bracklen;
|
||||
! goto bad_bracket;
|
||||
! }
|
||||
}
|
||||
else if (wc == L'[' && *wpat == L':') /* character class */
|
||||
{
|
||||
wpat++;
|
||||
+ bracklen++;
|
||||
in_cclass = 1;
|
||||
}
|
||||
***************
|
||||
*** 142,145 ****
|
||||
--- 150,154 ----
|
||||
{
|
||||
wpat++;
|
||||
+ bracklen++;
|
||||
in_cclass = 0;
|
||||
}
|
||||
***************
|
||||
*** 147,152 ****
|
||||
{
|
||||
wpat++;
|
||||
if (*wpat == L']') /* right bracket can appear as collating symbol */
|
||||
! wpat++;
|
||||
in_collsym = 1;
|
||||
}
|
||||
--- 156,165 ----
|
||||
{
|
||||
wpat++;
|
||||
+ bracklen++;
|
||||
if (*wpat == L']') /* right bracket can appear as collating symbol */
|
||||
! {
|
||||
! wpat++;
|
||||
! bracklen++;
|
||||
! }
|
||||
in_collsym = 1;
|
||||
}
|
||||
***************
|
||||
*** 154,157 ****
|
||||
--- 167,171 ----
|
||||
{
|
||||
wpat++;
|
||||
+ bracklen++;
|
||||
in_collsym = 0;
|
||||
}
|
||||
***************
|
||||
*** 159,164 ****
|
||||
{
|
||||
wpat++;
|
||||
if (*wpat == L']') /* right bracket can appear as equivalence class */
|
||||
! wpat++;
|
||||
in_equiv = 1;
|
||||
}
|
||||
--- 173,182 ----
|
||||
{
|
||||
wpat++;
|
||||
+ bracklen++;
|
||||
if (*wpat == L']') /* right bracket can appear as equivalence class */
|
||||
! {
|
||||
! wpat++;
|
||||
! bracklen++;
|
||||
! }
|
||||
in_equiv = 1;
|
||||
}
|
||||
***************
|
||||
*** 166,174 ****
|
||||
--- 184,196 ----
|
||||
{
|
||||
wpat++;
|
||||
+ bracklen++;
|
||||
in_equiv = 0;
|
||||
}
|
||||
+ else
|
||||
+ bracklen++;
|
||||
}
|
||||
while ((wc = *wpat++) != L']');
|
||||
matlen++; /* bracket expression can only match one char */
|
||||
+ bad_bracket:
|
||||
break;
|
||||
}
|
||||
***************
|
||||
*** 214,219 ****
|
||||
size_t max;
|
||||
{
|
||||
! char c, *brack;
|
||||
! int matlen, t, in_cclass, in_collsym, in_equiv;
|
||||
|
||||
if (*pat == 0)
|
||||
--- 236,241 ----
|
||||
size_t max;
|
||||
{
|
||||
! char c;
|
||||
! int matlen, bracklen, t, in_cclass, in_collsym, in_equiv;
|
||||
|
||||
if (*pat == 0)
|
||||
***************
|
||||
*** 255,259 ****
|
||||
case '[':
|
||||
/* scan for ending `]', skipping over embedded [:...:] */
|
||||
! brack = pat;
|
||||
c = *pat++;
|
||||
do
|
||||
--- 277,281 ----
|
||||
case '[':
|
||||
/* scan for ending `]', skipping over embedded [:...:] */
|
||||
! bracklen = 1;
|
||||
c = *pat++;
|
||||
do
|
||||
***************
|
||||
*** 261,276 ****
|
||||
if (c == 0)
|
||||
{
|
||||
! matlen += pat - brack - 1; /* incremented below */
|
||||
! break;
|
||||
}
|
||||
else if (c == '\\')
|
||||
{
|
||||
! c = *pat++;
|
||||
! if (*pat == 0)
|
||||
! break;
|
||||
}
|
||||
else if (c == '[' && *pat == ':') /* character class */
|
||||
{
|
||||
pat++;
|
||||
in_cclass = 1;
|
||||
}
|
||||
--- 283,306 ----
|
||||
if (c == 0)
|
||||
{
|
||||
! pat--; /* back up to NUL */
|
||||
! matlen += bracklen;
|
||||
! goto bad_bracket;
|
||||
}
|
||||
else if (c == '\\')
|
||||
{
|
||||
! /* *pat == backslash-escaped character */
|
||||
! bracklen++;
|
||||
! /* If the backslash or backslash-escape ends the string,
|
||||
! bail. The ++pat skips over the backslash escape */
|
||||
! if (*pat == 0 || *++pat == 0)
|
||||
! {
|
||||
! matlen += bracklen;
|
||||
! goto bad_bracket;
|
||||
! }
|
||||
}
|
||||
else if (c == '[' && *pat == ':') /* character class */
|
||||
{
|
||||
pat++;
|
||||
+ bracklen++;
|
||||
in_cclass = 1;
|
||||
}
|
||||
***************
|
||||
*** 278,281 ****
|
||||
--- 308,312 ----
|
||||
{
|
||||
pat++;
|
||||
+ bracklen++;
|
||||
in_cclass = 0;
|
||||
}
|
||||
***************
|
||||
*** 283,288 ****
|
||||
{
|
||||
pat++;
|
||||
if (*pat == ']') /* right bracket can appear as collating symbol */
|
||||
! pat++;
|
||||
in_collsym = 1;
|
||||
}
|
||||
--- 314,323 ----
|
||||
{
|
||||
pat++;
|
||||
+ bracklen++;
|
||||
if (*pat == ']') /* right bracket can appear as collating symbol */
|
||||
! {
|
||||
! pat++;
|
||||
! bracklen++;
|
||||
! }
|
||||
in_collsym = 1;
|
||||
}
|
||||
***************
|
||||
*** 290,293 ****
|
||||
--- 325,329 ----
|
||||
{
|
||||
pat++;
|
||||
+ bracklen++;
|
||||
in_collsym = 0;
|
||||
}
|
||||
***************
|
||||
*** 295,300 ****
|
||||
{
|
||||
pat++;
|
||||
if (*pat == ']') /* right bracket can appear as equivalence class */
|
||||
! pat++;
|
||||
in_equiv = 1;
|
||||
}
|
||||
--- 331,340 ----
|
||||
{
|
||||
pat++;
|
||||
+ bracklen++;
|
||||
if (*pat == ']') /* right bracket can appear as equivalence class */
|
||||
! {
|
||||
! pat++;
|
||||
! bracklen++;
|
||||
! }
|
||||
in_equiv = 1;
|
||||
}
|
||||
***************
|
||||
*** 302,310 ****
|
||||
--- 342,354 ----
|
||||
{
|
||||
pat++;
|
||||
+ bracklen++;
|
||||
in_equiv = 0;
|
||||
}
|
||||
+ else
|
||||
+ bracklen++;
|
||||
}
|
||||
while ((c = *pat++) != ']');
|
||||
matlen++; /* bracket expression can only match one char */
|
||||
+ bad_bracket:
|
||||
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 2
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
--- 26,30 ----
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
! #define PATCHLEVEL 3
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
53
bash42-004
Normal file
53
bash42-004
Normal file
@ -0,0 +1,53 @@
|
||||
BASH PATCH REPORT
|
||||
=================
|
||||
|
||||
Bash-Release: 4.2
|
||||
Patch-ID: bash42-004
|
||||
|
||||
Bug-Reported-by: Mike Frysinger <vapier@gentoo.org>
|
||||
Bug-Reference-ID: <201102182106.17834.vapier@gentoo.org>
|
||||
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2011-02/msg00222.html
|
||||
|
||||
Bug-Description:
|
||||
|
||||
When used in contexts where word splitting and quote removal were not
|
||||
performed, such as pattern removal or pattern substitution, empty strings
|
||||
(either literal or resulting from quoted variables that were unset or
|
||||
null) were not matched correctly, resulting in failure.
|
||||
|
||||
Patch (apply with `patch -p0'):
|
||||
|
||||
*** ../bash-4.2-patched/subst.c 2011-01-02 16:12:51.000000000 -0500
|
||||
--- subst.c 2011-02-18 22:30:13.000000000 -0500
|
||||
***************
|
||||
*** 3373,3379 ****
|
||||
if (string == 0 || *string == '\0')
|
||||
return (WORD_LIST *)NULL;
|
||||
|
||||
! td.flags = 0;
|
||||
td.word = string;
|
||||
tresult = call_expand_word_internal (&td, quoted, 1, dollar_at_p, has_dollar_at);
|
||||
return (tresult);
|
||||
--- 3373,3379 ----
|
||||
if (string == 0 || *string == '\0')
|
||||
return (WORD_LIST *)NULL;
|
||||
|
||||
! td.flags = W_NOSPLIT2; /* no splitting, remove "" and '' */
|
||||
td.word = string;
|
||||
tresult = call_expand_word_internal (&td, quoted, 1, dollar_at_p, has_dollar_at);
|
||||
return (tresult);
|
||||
*** ../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 3
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
--- 26,30 ----
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
! #define PATCHLEVEL 4
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
131
bash42-005
Normal file
131
bash42-005
Normal file
@ -0,0 +1,131 @@
|
||||
BASH PATCH REPORT
|
||||
=================
|
||||
|
||||
Bash-Release: 4.2
|
||||
Patch-ID: bash42-005
|
||||
|
||||
Bug-Reported-by: Dennis Williamson <dennistwilliamson@gmail.com>
|
||||
Bug-Reference-ID: <AANLkTikDbEV5rnbPc0zOfmZfBcg0xGetzLLzK+KjRiNa@mail.gmail.com>
|
||||
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2011-02/msg00147.html
|
||||
|
||||
Bug-Description:
|
||||
|
||||
Systems that use tzset() to set the local timezone require the TZ variable
|
||||
to be in the environment. Bash must make sure the environment has been
|
||||
modified with any updated value for TZ before calling tzset(). This
|
||||
affects prompt string expansions and the `%T' printf conversion specification
|
||||
on systems that do not allow bash to supply a replacement for getenv(3).
|
||||
|
||||
Patch (apply with `patch -p0'):
|
||||
|
||||
*** ../bash-4.2-patched/variables.h 2010-12-02 20:22:01.000000000 -0500
|
||||
--- variables.h 2011-02-19 19:57:12.000000000 -0500
|
||||
***************
|
||||
*** 314,317 ****
|
||||
--- 314,318 ----
|
||||
extern void sort_variables __P((SHELL_VAR **));
|
||||
|
||||
+ extern int chkexport __P((char *));
|
||||
extern void maybe_make_export_env __P((void));
|
||||
extern void update_export_env_inplace __P((char *, int, char *));
|
||||
*** ../bash-4.2-patched/variables.c 2011-01-24 20:07:48.000000000 -0500
|
||||
--- variables.c 2011-02-19 20:04:50.000000000 -0500
|
||||
***************
|
||||
*** 3654,3657 ****
|
||||
--- 3654,3673 ----
|
||||
}
|
||||
|
||||
+ int
|
||||
+ chkexport (name)
|
||||
+ char *name;
|
||||
+ {
|
||||
+ SHELL_VAR *v;
|
||||
+
|
||||
+ v = find_variable (name);
|
||||
+ if (exported_p (v))
|
||||
+ {
|
||||
+ array_needs_making = 1;
|
||||
+ maybe_make_export_env ();
|
||||
+ return 1;
|
||||
+ }
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
void
|
||||
maybe_make_export_env ()
|
||||
***************
|
||||
*** 4215,4219 ****
|
||||
{ "TEXTDOMAINDIR", sv_locale },
|
||||
|
||||
! #if defined (HAVE_TZSET) && defined (PROMPT_STRING_DECODE)
|
||||
{ "TZ", sv_tz },
|
||||
#endif
|
||||
--- 4231,4235 ----
|
||||
{ "TEXTDOMAINDIR", sv_locale },
|
||||
|
||||
! #if defined (HAVE_TZSET)
|
||||
{ "TZ", sv_tz },
|
||||
#endif
|
||||
***************
|
||||
*** 4559,4568 ****
|
||||
#endif /* HISTORY */
|
||||
|
||||
! #if defined (HAVE_TZSET) && defined (PROMPT_STRING_DECODE)
|
||||
void
|
||||
sv_tz (name)
|
||||
char *name;
|
||||
{
|
||||
! tzset ();
|
||||
}
|
||||
#endif
|
||||
--- 4575,4585 ----
|
||||
#endif /* HISTORY */
|
||||
|
||||
! #if defined (HAVE_TZSET)
|
||||
void
|
||||
sv_tz (name)
|
||||
char *name;
|
||||
{
|
||||
! if (chkexport (name))
|
||||
! tzset ();
|
||||
}
|
||||
#endif
|
||||
*** ../bash-4.2-patched/parse.y 2011-01-02 15:48:11.000000000 -0500
|
||||
--- parse.y 2011-02-19 20:05:00.000000000 -0500
|
||||
***************
|
||||
*** 5136,5139 ****
|
||||
--- 5136,5142 ----
|
||||
/* Make the current time/date into a string. */
|
||||
(void) time (&the_time);
|
||||
+ #if defined (HAVE_TZSET)
|
||||
+ sv_tz ("TZ"); /* XXX -- just make sure */
|
||||
+ #endif
|
||||
tm = localtime (&the_time);
|
||||
|
||||
*** ../bash-4.2-patched/builtins/printf.def 2010-11-23 10:02:55.000000000 -0500
|
||||
--- builtins/printf.def 2011-02-19 20:05:04.000000000 -0500
|
||||
***************
|
||||
*** 466,469 ****
|
||||
--- 466,472 ----
|
||||
else
|
||||
secs = arg;
|
||||
+ #if defined (HAVE_TZSET)
|
||||
+ sv_tz ("TZ"); /* XXX -- just make sure */
|
||||
+ #endif
|
||||
tm = localtime (&secs);
|
||||
n = strftime (timebuf, sizeof (timebuf), timefmt, tm);
|
||||
*** ../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 4
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
--- 26,30 ----
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
! #define PATCHLEVEL 5
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
Loading…
Reference in New Issue
Block a user