diff options
author | Peter Stephenson <pws@users.sourceforge.net> | 2010-01-20 11:16:22 +0000 |
---|---|---|
committer | Peter Stephenson <pws@users.sourceforge.net> | 2010-01-20 11:16:22 +0000 |
commit | af68ff74cd5e740d69020ad4ff20f1d5a8dcb4de (patch) | |
tree | 4b3232caa414d1717aca990dd7b3588b973ad372 | |
parent | 1c71dfd735f34b2b3c7cf8abc3144e763fc96b60 (diff) | |
download | zsh-af68ff74cd5e740d69020ad4ff20f1d5a8dcb4de.tar.gz zsh-af68ff74cd5e740d69020ad4ff20f1d5a8dcb4de.tar.xz zsh-af68ff74cd5e740d69020ad4ff20f1d5a8dcb4de.zip |
27608: fix memory for mbegin, mend & regexp test
-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 |