diff options
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | Src/Modules/pcre.c | 4 | ||||
-rw-r--r-- | Src/Modules/regex.c | 8 | ||||
-rw-r--r-- | Test/C02cond.ztst | 13 |
4 files changed, 20 insertions, 13 deletions
diff --git a/ChangeLog b/ChangeLog index 6bf85e2f4..a9f0b7da9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2010-01-20 Peter Stephenson <pws@csr.com> + + * 27608: Src/Modules/pcre.c, Src/Modules/regex.c, + Test/C02cond.ztst: test was broken and sizes of variables + for arrays were wrong. + 2010-01-19 Peter Stephenson <pws@csr.com> * unposted: Doc/Zsh/contrib.yo, Functions/Misc/regexp-replace: @@ -12609,5 +12615,5 @@ ***************************************************** * This is used by the shell to define $ZSH_PATCHLEVEL -* $Revision: 1.4867 $ +* $Revision: 1.4868 $ ***************************************************** diff --git a/Src/Modules/pcre.c b/Src/Modules/pcre.c index f8b79adea..e1a897944 100644 --- a/Src/Modules/pcre.c +++ b/Src/Modules/pcre.c @@ -194,8 +194,8 @@ zpcre_get_substrings(char *arg, int *ovec, int ret, char *matchvar, char **mbegin, **mend, **bptr, **eptr; int i, *ipair; - bptr = mbegin = zalloc(nelem+1); - eptr = mend = zalloc(nelem+1); + bptr = mbegin = zalloc(sizeof(char*)*(nelem+1)); + eptr = mend = zalloc(sizeof(char*)*(nelem+1)); for (ipair = ovec + 2, i = 0; i < nelem; diff --git a/Src/Modules/regex.c b/Src/Modules/regex.c index 25dbddf07..08e815003 100644 --- a/Src/Modules/regex.c +++ b/Src/Modules/regex.c @@ -135,11 +135,11 @@ zcond_regex_match(char **a, int id) setiparam("MEND", offs + !isset(KSHARRAYS) - 1); if (nelem) { char **mbegin, **mend, **bptr, **eptr; - bptr = mbegin = (char **)zalloc(nelem+1); - eptr = mend = (char **)zalloc(nelem+1); + bptr = mbegin = (char **)zalloc(sizeof(char *)*(nelem+1)); + eptr = mend = (char **)zalloc(sizeof(char *)*(nelem+1)); - for (m = matches + start, n = start; - n <= (int)re.re_nsub; + for (m = matches + start, n = 0; + n < nelem; ++n, ++m, ++bptr, ++eptr) { char buf[DIGBUFSIZE]; diff --git a/Test/C02cond.ztst b/Test/C02cond.ztst index b0e278f4b..a824709d3 100644 --- a/Test/C02cond.ztst +++ b/Test/C02cond.ztst @@ -251,7 +251,7 @@ F:Failures in these cases do not indicate a problem in the shell. fi 0:regex tests shouldn't crash - if zmodload -i zsh/regex 2>/dev/null; then + (if zmodload -i zsh/regex 2>/dev/null; then string="this has stuff in it" bad_regex=0 if [[ $string =~ "h([a-z]*) s([a-z]*) " ]]; then @@ -259,7 +259,7 @@ F:Failures in these cases do not indicate a problem in the shell. print -r "regex variables MATCH MBEGIN MEND: '$MATCH $MBEGIN $MEND' should be: - 'has stuff 6 15'" >&2 + 'has stuff 6 15'" bad_regex=1 else results=("as 7 8" "tuff 11 14") @@ -268,19 +268,20 @@ F:Failures in these cases do not indicate a problem in the shell. print -r "regex variables match[$i] mbegin[$i] mend[$i]: '$match[$i] $mbegin[$i] $mend[$i]' should be - '$results[$i]'" >&2 + '$results[$i]'" + bad_regex=1 break fi done fi + (( bad_regex )) || print OK else - print -r "regex failed to match '$string'" >&2 + print -r "regex failed to match '$string'" fi - (( bad_regex )) || print OK else # if it didn't load, tough, but not a test error print OK - fi + fi) 0:MATCH, MBEGIN, MEND, match, mbegin, mend >OK |