diff options
author | An-Cheng Huang <ancheng@vyatta.com> | 2007-11-12 13:57:46 -0800 |
---|---|---|
committer | An-Cheng Huang <ancheng@vyatta.com> | 2007-11-14 16:17:01 -0800 |
commit | f533861f868afc167aae06968db5bc138729189f (patch) | |
tree | eff8b5e0ce0b88c2ab470a1bfd841668f26a005d /lib/glob | |
parent | fc7695ee76400ee9833301f98a3fe483d64591b5 (diff) | |
download | vyatta-bash-f533861f868afc167aae06968db5bc138729189f.tar.gz vyatta-bash-f533861f868afc167aae06968db5bc138729189f.zip |
patched with "debian_patches" in bash_3.1dfsg-8.diff.gz
Diffstat (limited to 'lib/glob')
-rw-r--r-- | lib/glob/glob.c | 3 | ||||
-rw-r--r-- | lib/glob/sm_loop.c | 19 |
2 files changed, 17 insertions, 5 deletions
diff --git a/lib/glob/glob.c b/lib/glob/glob.c index 9a2d833..1453b06 100644 --- a/lib/glob/glob.c +++ b/lib/glob/glob.c @@ -360,6 +360,7 @@ glob_vector (pat, dir, flags) count = lose = skip = 0; firstmalloc = 0; + nalloca = 0; /* If PAT is empty, skip the loop, but return one (empty) filename. */ if (pat == 0 || *pat == '\0') @@ -546,6 +547,8 @@ glob_vector (pat, dir, flags) firstmalloc = 0; tmplink = lastlink; } + else + tmplink = 0; free (lastlink->name); lastlink = lastlink->next; FREE (tmplink); diff --git a/lib/glob/sm_loop.c b/lib/glob/sm_loop.c index 6e8cf3a..d66ad18 100644 --- a/lib/glob/sm_loop.c +++ b/lib/glob/sm_loop.c @@ -638,12 +638,13 @@ EXTMATCH (xc, s, se, p, pe, flags) CHAR *psub; /* pointer to sub-pattern */ CHAR *pnext; /* pointer to next sub-pattern */ CHAR *srest; /* pointer to rest of string */ - int m1, m2; + int m1, m2, xflags; /* xflags = flags passed to recursive matches */ #if DEBUG_MATCHING fprintf(stderr, "extmatch: xc = %c\n", xc); 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 prest = PATSCAN (p + (*p == L('(')), pe, 0); /* ) */ @@ -677,8 +678,12 @@ fprintf(stderr, "extmatch: p = %s; pe = %s\n", p, pe); string matches the rest of the pattern. Also handle 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 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); } @@ -704,8 +709,10 @@ fprintf(stderr, "extmatch: p = %s; pe = %s\n", p, pe); srest = (prest == pe) ? se : s; 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, flags) == 0) + GMATCH (srest, se, prest, pe, xflags) == 0) return (0); } if (pnext == prest) @@ -726,7 +733,9 @@ fprintf(stderr, "extmatch: p = %s; pe = %s\n", p, pe); if (pnext == prest) break; } - if (m1 == 0 && GMATCH (srest, se, prest, pe, flags) == 0) + /* 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); } return (FNM_NOMATCH); |