|
Ondrej Oprala |
1b8a75 |
BASH PATCH REPORT
|
|
Ondrej Oprala |
1b8a75 |
=================
|
|
Ondrej Oprala |
1b8a75 |
|
|
Ondrej Oprala |
1b8a75 |
Bash-Release: 4.3
|
|
Ondrej Oprala |
1b8a75 |
Patch-ID: bash43-016
|
|
Ondrej Oprala |
1b8a75 |
|
|
Ondrej Oprala |
1b8a75 |
Bug-Reported-by: Pierre Gaston <pierre.gaston@gmail.com>
|
|
Ondrej Oprala |
1b8a75 |
Bug-Reference-ID: <CAPSX3sTCD61k1VQLJ5r-LWzEt+e7Xc-fxXmwn2u8EA5gJJej8Q@mail.gmail.com>
|
|
Ondrej Oprala |
1b8a75 |
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00100.html
|
|
Ondrej Oprala |
1b8a75 |
|
|
Ondrej Oprala |
1b8a75 |
Bug-Description:
|
|
Ondrej Oprala |
1b8a75 |
|
|
Ondrej Oprala |
1b8a75 |
An extended glob pattern containing a slash (`/') causes the globbing code
|
|
Ondrej Oprala |
1b8a75 |
to misinterpret it as a directory separator.
|
|
Ondrej Oprala |
1b8a75 |
|
|
Ondrej Oprala |
1b8a75 |
Patch (apply with `patch -p0'):
|
|
Ondrej Oprala |
1b8a75 |
*** ../bash-4.3-patched/lib/glob/glob.c 2014-03-28 10:54:23.000000000 -0400
|
|
Ondrej Oprala |
1b8a75 |
--- lib/glob/glob.c 2014-05-02 10:24:28.000000000 -0400
|
|
Ondrej Oprala |
1b8a75 |
***************
|
|
Ondrej Oprala |
1b8a75 |
*** 124,127 ****
|
|
Ondrej Oprala |
1b8a75 |
--- 124,129 ----
|
|
Ondrej Oprala |
1b8a75 |
extern wchar_t *glob_patscan_wc __P((wchar_t *, wchar_t *, int));
|
|
Ondrej Oprala |
1b8a75 |
|
|
Ondrej Oprala |
1b8a75 |
+ extern char *glob_dirscan __P((char *, int));
|
|
Ondrej Oprala |
1b8a75 |
+
|
|
Ondrej Oprala |
1b8a75 |
/* Compile `glob_loop.c' for single-byte characters. */
|
|
Ondrej Oprala |
1b8a75 |
#define CHAR unsigned char
|
|
Ondrej Oprala |
1b8a75 |
***************
|
|
Ondrej Oprala |
1b8a75 |
*** 188,191 ****
|
|
Ondrej Oprala |
1b8a75 |
--- 190,196 ----
|
|
Ondrej Oprala |
1b8a75 |
pe = glob_patscan (pp, se, 0); /* end of extglob pattern (( */
|
|
Ondrej Oprala |
1b8a75 |
/* we should check for invalid extglob pattern here */
|
|
Ondrej Oprala |
1b8a75 |
+ if (pe == 0)
|
|
Ondrej Oprala |
1b8a75 |
+ return 0;
|
|
Ondrej Oprala |
1b8a75 |
+
|
|
Ondrej Oprala |
1b8a75 |
/* if pe != se we have more of the pattern at the end of the extglob
|
|
Ondrej Oprala |
1b8a75 |
pattern. Check the easy case first ( */
|
|
Ondrej Oprala |
1b8a75 |
***************
|
|
Ondrej Oprala |
1b8a75 |
*** 1016,1020 ****
|
|
Ondrej Oprala |
1b8a75 |
char **result;
|
|
Ondrej Oprala |
1b8a75 |
unsigned int result_size;
|
|
Ondrej Oprala |
1b8a75 |
! char *directory_name, *filename, *dname;
|
|
Ondrej Oprala |
1b8a75 |
unsigned int directory_len;
|
|
Ondrej Oprala |
1b8a75 |
int free_dirname; /* flag */
|
|
Ondrej Oprala |
1b8a75 |
--- 1021,1025 ----
|
|
Ondrej Oprala |
1b8a75 |
char **result;
|
|
Ondrej Oprala |
1b8a75 |
unsigned int result_size;
|
|
Ondrej Oprala |
1b8a75 |
! char *directory_name, *filename, *dname, *fn;
|
|
Ondrej Oprala |
1b8a75 |
unsigned int directory_len;
|
|
Ondrej Oprala |
1b8a75 |
int free_dirname; /* flag */
|
|
Ondrej Oprala |
1b8a75 |
***************
|
|
Ondrej Oprala |
1b8a75 |
*** 1032,1035 ****
|
|
Ondrej Oprala |
1b8a75 |
--- 1037,1052 ----
|
|
Ondrej Oprala |
1b8a75 |
/* Find the filename. */
|
|
Ondrej Oprala |
1b8a75 |
filename = strrchr (pathname, '/');
|
|
Ondrej Oprala |
1b8a75 |
+ #if defined (EXTENDED_GLOB)
|
|
Ondrej Oprala |
1b8a75 |
+ if (filename && extended_glob)
|
|
Ondrej Oprala |
1b8a75 |
+ {
|
|
Ondrej Oprala |
1b8a75 |
+ fn = glob_dirscan (pathname, '/');
|
|
Ondrej Oprala |
1b8a75 |
+ #if DEBUG_MATCHING
|
|
Ondrej Oprala |
1b8a75 |
+ if (fn != filename)
|
|
Ondrej Oprala |
1b8a75 |
+ fprintf (stderr, "glob_filename: glob_dirscan: fn (%s) != filename (%s)\n", fn ? fn : "(null)", filename);
|
|
Ondrej Oprala |
1b8a75 |
+ #endif
|
|
Ondrej Oprala |
1b8a75 |
+ filename = fn;
|
|
Ondrej Oprala |
1b8a75 |
+ }
|
|
Ondrej Oprala |
1b8a75 |
+ #endif
|
|
Ondrej Oprala |
1b8a75 |
+
|
|
Ondrej Oprala |
1b8a75 |
if (filename == NULL)
|
|
Ondrej Oprala |
1b8a75 |
{
|
|
Ondrej Oprala |
1b8a75 |
*** ../bash-4.3-patched/lib/glob/gmisc.c 2014-03-28 10:54:23.000000000 -0400
|
|
Ondrej Oprala |
1b8a75 |
--- lib/glob/gmisc.c 2014-05-02 09:35:57.000000000 -0400
|
|
Ondrej Oprala |
1b8a75 |
***************
|
|
Ondrej Oprala |
1b8a75 |
*** 43,46 ****
|
|
Ondrej Oprala |
1b8a75 |
--- 43,48 ----
|
|
Ondrej Oprala |
1b8a75 |
#define WRPAREN L')'
|
|
Ondrej Oprala |
1b8a75 |
|
|
Ondrej Oprala |
1b8a75 |
+ extern char *glob_patscan __P((char *, char *, int));
|
|
Ondrej Oprala |
1b8a75 |
+
|
|
Ondrej Oprala |
1b8a75 |
/* Return 1 of the first character of WSTRING could match the first
|
|
Ondrej Oprala |
1b8a75 |
character of pattern WPAT. Wide character version. */
|
|
Ondrej Oprala |
1b8a75 |
***************
|
|
Ondrej Oprala |
1b8a75 |
*** 376,377 ****
|
|
Ondrej Oprala |
1b8a75 |
--- 378,410 ----
|
|
Ondrej Oprala |
1b8a75 |
return matlen;
|
|
Ondrej Oprala |
1b8a75 |
}
|
|
Ondrej Oprala |
1b8a75 |
+
|
|
Ondrej Oprala |
1b8a75 |
+ /* Skip characters in PAT and return the final occurrence of DIRSEP. This
|
|
Ondrej Oprala |
1b8a75 |
+ is only called when extended_glob is set, so we have to skip over extglob
|
|
Ondrej Oprala |
1b8a75 |
+ patterns x(...) */
|
|
Ondrej Oprala |
1b8a75 |
+ char *
|
|
Ondrej Oprala |
1b8a75 |
+ glob_dirscan (pat, dirsep)
|
|
Ondrej Oprala |
1b8a75 |
+ char *pat;
|
|
Ondrej Oprala |
1b8a75 |
+ int dirsep;
|
|
Ondrej Oprala |
1b8a75 |
+ {
|
|
Ondrej Oprala |
1b8a75 |
+ char *p, *d, *pe, *se;
|
|
Ondrej Oprala |
1b8a75 |
+
|
|
Ondrej Oprala |
1b8a75 |
+ d = pe = se = 0;
|
|
Ondrej Oprala |
1b8a75 |
+ for (p = pat; p && *p; p++)
|
|
Ondrej Oprala |
1b8a75 |
+ {
|
|
Ondrej Oprala |
1b8a75 |
+ if (extglob_pattern_p (p))
|
|
Ondrej Oprala |
1b8a75 |
+ {
|
|
Ondrej Oprala |
1b8a75 |
+ if (se == 0)
|
|
Ondrej Oprala |
1b8a75 |
+ se = p + strlen (p) - 1;
|
|
Ondrej Oprala |
1b8a75 |
+ pe = glob_patscan (p + 2, se, 0);
|
|
Ondrej Oprala |
1b8a75 |
+ if (pe == 0)
|
|
Ondrej Oprala |
1b8a75 |
+ continue;
|
|
Ondrej Oprala |
1b8a75 |
+ else if (*pe == 0)
|
|
Ondrej Oprala |
1b8a75 |
+ break;
|
|
Ondrej Oprala |
1b8a75 |
+ p = pe - 1; /* will do increment above */
|
|
Ondrej Oprala |
1b8a75 |
+ continue;
|
|
Ondrej Oprala |
1b8a75 |
+ }
|
|
Ondrej Oprala |
1b8a75 |
+ if (*p == dirsep)
|
|
Ondrej Oprala |
1b8a75 |
+ d = p;
|
|
Ondrej Oprala |
1b8a75 |
+ }
|
|
Ondrej Oprala |
1b8a75 |
+ return d;
|
|
Ondrej Oprala |
1b8a75 |
+ }
|
|
Ondrej Oprala |
1b8a75 |
|
|
Ondrej Oprala |
1b8a75 |
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
|
|
Ondrej Oprala |
1b8a75 |
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
|
|
Ondrej Oprala |
1b8a75 |
***************
|
|
Ondrej Oprala |
1b8a75 |
*** 26,30 ****
|
|
Ondrej Oprala |
1b8a75 |
looks for to find the patch level (for the sccs version string). */
|
|
Ondrej Oprala |
1b8a75 |
|
|
Ondrej Oprala |
1b8a75 |
! #define PATCHLEVEL 15
|
|
Ondrej Oprala |
1b8a75 |
|
|
Ondrej Oprala |
1b8a75 |
#endif /* _PATCHLEVEL_H_ */
|
|
Ondrej Oprala |
1b8a75 |
--- 26,30 ----
|
|
Ondrej Oprala |
1b8a75 |
looks for to find the patch level (for the sccs version string). */
|
|
Ondrej Oprala |
1b8a75 |
|
|
Ondrej Oprala |
1b8a75 |
! #define PATCHLEVEL 16
|
|
Ondrej Oprala |
1b8a75 |
|
|
Ondrej Oprala |
1b8a75 |
#endif /* _PATCHLEVEL_H_ */
|