summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Shahaf <d.s@daniel.shahaf.name>2015-12-13 14:53:17 +0000
committerMikael Magnusson <mikachu@gmail.com>2016-05-08 21:57:06 +0200
commit3062f6aef115bd60fa3a0cae691bd9338f2d3ce7 (patch)
tree9aa65ffca965ddb0c3a432183ee7fc3233b33818
parentUncontroversial (diff)
downloadzsh-3062f6aef115bd60fa3a0cae691bd9338f2d3ce7.tar
zsh-3062f6aef115bd60fa3a0cae691bd9338f2d3ce7.tar.gz
zsh-3062f6aef115bd60fa3a0cae691bd9338f2d3ce7.tar.bz2
zsh-3062f6aef115bd60fa3a0cae691bd9338f2d3ce7.tar.lz
zsh-3062f6aef115bd60fa3a0cae691bd9338f2d3ce7.tar.xz
zsh-3062f6aef115bd60fa3a0cae691bd9338f2d3ce7.tar.zst
zsh-3062f6aef115bd60fa3a0cae691bd9338f2d3ce7.zip
CPU SPINNER AND OUT-OF-MEMORY BUGS - DO NOT USE
% make -s check ./B08shift.ztst: starting. *** /tmp/zsh.ztst.out.20779 Sun Dec 13 16:15:26 2015 --- /tmp/zsh.ztst.tout.20779 Sun Dec 13 16:15:26 2015 *************** *** 1,4 **** ! tether mether pip azer sezar akker conter dick ! mether pip azer sezar akker conter dick ! mether pip azer sezar ! mether pip azer --- 1,4 ---- ! yan tan tether mether pip azer sezar akker conter dick ! yan tan tether mether pip azer sezar akker conter dick ! yan tan tether mether pip azer sezar akker conter dick ! yan tan tether mether pip azer sezar akker conter dick Test ./B08shift.ztst failed: output differs from expected as shown above for: array=(yan tan tether mether pip azer sezar akker conter dick) shift 2 array print $array shift array print $array shift -p 3 array print $array shift -p array print $array Error output: (eval):shift:2: shift count must be <= $# (eval):shift:4: shift count must be <= $# (eval):shift:6: shift count must be <= $# (eval):shift:8: shift count must be <= $# Was testing: shifting array ./B08shift.ztst: test failed. ./D04parameter.ztst: starting. *** /tmp/zsh.ztst.out.22016 Sun Dec 13 16:15:49 2015 --- /tmp/zsh.ztst.tout.22016 Sun Dec 13 16:15:49 2015 *************** *** 1,10 **** ! a 1 b 2 c 3 ! a 1 b 2 c 3 ! a 1 b 2 ! a 1 b 2 c 1 d 2 ! a a b ! 1 ! a a ! 1 ! b ! 2 2 --- 1,6 ---- ! ! a b c ! ! a b c d ! ! Test ./D04parameter.ztst failed: output differs from expected as shown above for: foo=(a b c) bar=(1 2 3) print ${foo:^bar} print ${foo:^^bar} foo=(a b c d) bar=(1 2) print ${foo:^bar} print ${foo:^^bar} foo=('a a' b) bar=(1 '2 2') print -l "${foo:^bar}" print -l "${(@)foo:^bar}" Was testing: Zipping arrays, correct output ./D04parameter.ztst: test failed. ./X02zlevi.ztst: starting. comptesteval:6: fatal error: out of heap memory ./X03zlebindkey.ztst: starting. comptesteval:6: fatal error: out of heap memory ./Y01completion.ztst: starting. comptesteval:6: fatal error: out of heap memory ./Y02compmatch.ztst: starting. comptesteval:6: fatal error: out of heap memory ./Y03arguments.ztst: starting. comptesteval:6: fatal error: out of heap memory ************************************** 41 successful test scripts, 7 failures, 0 skipped **************************************
-rw-r--r--Src/params.c32
1 files changed, 18 insertions, 14 deletions
diff --git a/Src/params.c b/Src/params.c
index fef95fe7f..abb178042 100644
--- a/Src/params.c
+++ b/Src/params.c
@@ -263,7 +263,7 @@ typedef struct iparam {
static initparam special_params[] ={
#define GSU(X) BR((GsuScalar)(void *)(&(X)))
#define NULL_GSU BR((GsuScalar)(void *)NULL)
-#define IPDEF1(A,B,C) {{NULL,A,PM_INTEGER|PM_SPECIAL|C},BR(NULL),GSU(B),10,0,NULL,NULL,NULL,0}
+#define IPDEF1(A,B,C) {{NULL,A,PM_INTEGER|PM_SPECIAL|C},BR(NULL),GSU(B),10,0,0,NULL,NULL,NULL,0}
IPDEF1("#", pound_gsu, PM_READONLY),
IPDEF1("ERRNO", errno_gsu, PM_UNSET),
IPDEF1("GID", gid_gsu, PM_DONTIMPORT | PM_RESTRICTED),
@@ -276,7 +276,7 @@ IPDEF1("UID", uid_gsu, PM_DONTIMPORT | PM_RESTRICTED),
IPDEF1("EUID", euid_gsu, PM_DONTIMPORT | PM_RESTRICTED),
IPDEF1("TTYIDLE", ttyidle_gsu, PM_READONLY),
-#define IPDEF2(A,B,C) {{NULL,A,PM_SCALAR|PM_SPECIAL|C},BR(NULL),GSU(B),0,0,NULL,NULL,NULL,0}
+#define IPDEF2(A,B,C) {{NULL,A,PM_SCALAR|PM_SPECIAL|C},BR(NULL),GSU(B),0,0,0,NULL,NULL,NULL,0}
IPDEF2("USERNAME", username_gsu, PM_DONTIMPORT|PM_RESTRICTED),
IPDEF2("-", dash_gsu, PM_READONLY),
IPDEF2("histchars", histchars_gsu, PM_DONTIMPORT),
@@ -310,7 +310,7 @@ LCIPDEF("LC_TIME"),
# endif
#endif /* USE_LOCALE */
-#define IPDEF4(A,B) {{NULL,A,PM_INTEGER|PM_READONLY|PM_SPECIAL},BR((void *)B),GSU(varint_readonly_gsu),10,0,NULL,NULL,NULL,0}
+#define IPDEF4(A,B) {{NULL,A,PM_INTEGER|PM_READONLY|PM_SPECIAL},BR((void *)B),GSU(varint_readonly_gsu),10,0,0,NULL,NULL,NULL,0}
IPDEF4("!", &lastpid),
IPDEF4("$", &mypid),
IPDEF4("?", &lastval),
@@ -319,21 +319,21 @@ IPDEF4("LINENO", &lineno),
IPDEF4("PPID", &ppid),
IPDEF4("ZSH_SUBSHELL", &zsh_subshell),
-#define IPDEF5(A,B,F) {{NULL,A,PM_INTEGER|PM_SPECIAL},BR((void *)B),GSU(F),10,0,NULL,NULL,NULL,0}
-#define IPDEF5U(A,B,F) {{NULL,A,PM_INTEGER|PM_SPECIAL|PM_UNSET},BR((void *)B),GSU(F),10,0,NULL,NULL,NULL,0}
+#define IPDEF5(A,B,F) {{NULL,A,PM_INTEGER|PM_SPECIAL},BR((void *)B),GSU(F),10,0,0,NULL,NULL,NULL,0}
+#define IPDEF5U(A,B,F) {{NULL,A,PM_INTEGER|PM_SPECIAL|PM_UNSET},BR((void *)B),GSU(F),10,0,0,NULL,NULL,NULL,0}
IPDEF5("COLUMNS", &zterm_columns, zlevar_gsu),
IPDEF5("LINES", &zterm_lines, zlevar_gsu),
IPDEF5U("ZLE_RPROMPT_INDENT", &rprompt_indent, zlevar_gsu),
IPDEF5("SHLVL", &shlvl, varinteger_gsu),
/* Don't import internal integer status variables. */
-#define IPDEF6(A,B,F) {{NULL,A,PM_INTEGER|PM_SPECIAL|PM_DONTIMPORT},BR((void *)B),GSU(F),10,0,NULL,NULL,NULL,0}
+#define IPDEF6(A,B,F) {{NULL,A,PM_INTEGER|PM_SPECIAL|PM_DONTIMPORT},BR((void *)B),GSU(F),10,0,0,NULL,NULL,NULL,0}
IPDEF6("OPTIND", &zoptind, varinteger_gsu),
IPDEF6("TRY_BLOCK_ERROR", &try_errflag, varinteger_gsu),
IPDEF6("TRY_BLOCK_INTERRUPT", &try_interrupt, varinteger_gsu),
-#define IPDEF7(A,B) {{NULL,A,PM_SCALAR|PM_SPECIAL},BR((void *)B),GSU(varscalar_gsu),0,0,NULL,NULL,NULL,0}
-#define IPDEF7U(A,B) {{NULL,A,PM_SCALAR|PM_SPECIAL|PM_UNSET},BR((void *)B),GSU(varscalar_gsu),0,0,NULL,NULL,NULL,0}
+#define IPDEF7(A,B) {{NULL,A,PM_SCALAR|PM_SPECIAL},BR((void *)B),GSU(varscalar_gsu),0,0,0,NULL,NULL,NULL,0}
+#define IPDEF7U(A,B) {{NULL,A,PM_SCALAR|PM_SPECIAL|PM_UNSET},BR((void *)B),GSU(varscalar_gsu),0,0,0,NULL,NULL,NULL,0}
IPDEF7("OPTARG", &zoptarg),
IPDEF7("NULLCMD", &nullcmd),
IPDEF7U("POSTEDIT", &postedit),
@@ -348,7 +348,7 @@ IPDEF7("PS3", &prompt3),
IPDEF7("PS4", &prompt4),
IPDEF7("SPROMPT", &sprompt),
-#define IPDEF8(A,B,C,D) {{NULL,A,D|PM_SCALAR|PM_SPECIAL},BR((void *)B),GSU(colonarr_gsu),0,0,NULL,C,NULL,0}
+#define IPDEF8(A,B,C,D) {{NULL,A,D|PM_SCALAR|PM_SPECIAL},BR((void *)B),GSU(colonarr_gsu),0,0,0,NULL,C,NULL,0}
IPDEF8("CDPATH", &cdpath, "cdpath", 0),
IPDEF8("FIGNORE", &fignore, "fignore", 0),
IPDEF8("FPATH", &fpath, "fpath", 0),
@@ -361,7 +361,7 @@ IPDEF8("ZSH_EVAL_CONTEXT", &zsh_eval_context, "zsh_eval_context", PM_READONLY),
/* MODULE_PATH is not imported for security reasons */
IPDEF8("MODULE_PATH", &module_path, "module_path", PM_DONTIMPORT|PM_RESTRICTED),
-#define IPDEF9F(A,B,C,D) {{NULL,A,D|PM_ARRAY|PM_SPECIAL|PM_DONTIMPORT},BR((void *)B),GSU(vararray_gsu),0,0,NULL,C,NULL,0}
+#define IPDEF9F(A,B,C,D) {{NULL,A,D|PM_ARRAY|PM_SPECIAL|PM_DONTIMPORT},BR((void *)B),GSU(vararray_gsu),0,0,0,NULL,C,NULL,0}
#define IPDEF9(A,B,C) IPDEF9F(A,B,C,0)
IPDEF9F("*", &pparams, NULL, PM_ARRAY|PM_SPECIAL|PM_DONTIMPORT|PM_READONLY),
IPDEF9F("@", &pparams, NULL, PM_ARRAY|PM_SPECIAL|PM_DONTIMPORT|PM_READONLY),
@@ -370,9 +370,9 @@ IPDEF9F("@", &pparams, NULL, PM_ARRAY|PM_SPECIAL|PM_DONTIMPORT|PM_READONLY),
* This empty row indicates the end of parameters available in
* all emulations.
*/
-{{NULL,NULL,0},BR(NULL),NULL_GSU,0,0,NULL,NULL,NULL,0},
+{{NULL,NULL,0},BR(NULL),NULL_GSU,0,0,0,NULL,NULL,NULL,0},
-#define IPDEF10(A,B) {{NULL,A,PM_ARRAY|PM_SPECIAL},BR(NULL),GSU(B),10,0,NULL,NULL,NULL,0}
+#define IPDEF10(A,B) {{NULL,A,PM_ARRAY|PM_SPECIAL},BR(NULL),GSU(B),10,0,0,NULL,NULL,NULL,0}
/*
* The following parameters are not available in sh/ksh compatibility *
@@ -407,7 +407,7 @@ IPDEF9F("path", &path, "PATH", PM_RESTRICTED),
IPDEF10("pipestatus", pipestatus_gsu),
-{{NULL,NULL,0},BR(NULL),NULL_GSU,0,0,NULL,NULL,NULL,0},
+{{NULL,NULL,0},BR(NULL),NULL_GSU,0,0,0,NULL,NULL,NULL,0},
};
/*
@@ -895,7 +895,7 @@ createparam(char *name, int flags)
}
pm = oldpm;
- pm->base = pm->width = 0;
+ pm->base = pm->width = pm->length = 0;
oldpm = pm->old;
} else {
pm = (Param) zshcalloc(sizeof *pm);
@@ -1008,6 +1008,7 @@ copyparam(Param tpm, Param pm, int fakecopy)
*/
tpm->node.flags = pm->node.flags;
tpm->base = pm->base;
+ tpm->length = pm->length;
tpm->width = pm->width;
tpm->level = pm->level;
if (!fakecopy)
@@ -2595,6 +2596,7 @@ setarrvalue(Value v, char **val)
*p = NULL;
v->pm->gsu.a->setfn(v->pm, new);
+ v->pm->length = post_assignment_length;
freearray(val);
}
}
@@ -2908,6 +2910,8 @@ assignaparam(char *s, char **val, int flags)
char **new;
int lv = arrlen(val);
+ v->pm->length = lv + 1;
+
new = (char **) zalloc(sizeof(char *) * (lv + 2));
*new = ztrdup(getstrvalue(v));
memcpy(new+1, val, sizeof(char *) * (lv + 1));