about summary refs log tree commit diff
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
parent0a88c244ed49aa67543e3fc9b9a5b213e229472d (diff)
downloadzsh-3062f6aef115bd60fa3a0cae691bd9338f2d3ce7.tar.gz
zsh-3062f6aef115bd60fa3a0cae691bd9338f2d3ce7.tar.xz
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));