about summary refs log tree commit diff
diff options
context:
space:
mode:
authorPaul Ackersviller <packersv@users.sourceforge.net>2007-11-20 03:21:01 +0000
committerPaul Ackersviller <packersv@users.sourceforge.net>2007-11-20 03:21:01 +0000
commitcd1b74c3036afb2fc115538e130fecbfa6259ff4 (patch)
tree1f928410dc1dbee6d95fa588c1627db12d91415d
parente2bcc2185f03ecc12924001454a7bbe887f06e0b (diff)
downloadzsh-cd1b74c3036afb2fc115538e130fecbfa6259ff4.tar.gz
zsh-cd1b74c3036afb2fc115538e130fecbfa6259ff4.tar.xz
zsh-cd1b74c3036afb2fc115538e130fecbfa6259ff4.zip
Merge of 23696: assignment to negative subscripts in scalars before the start was broken; now adds at start.
-rw-r--r--Src/params.c5
-rw-r--r--Test/D04parameter.ztst16
2 files changed, 20 insertions, 1 deletions
diff --git a/Src/params.c b/Src/params.c
index af5c9d906..3a185169e 100644
--- a/Src/params.c
+++ b/Src/params.c
@@ -1726,8 +1726,11 @@ setstrvalue(Value v, char *val)
 	    }
 	    if (v->start > zlen)
 		v->start = zlen;
-	    if (v->end < 0)
+	    if (v->end < 0) {
 		v->end += zlen + 1;
+		if (v->end < 0)
+		    v->end = 0;
+	    }
 	    else if (v->end > zlen)
 		v->end = zlen;
 	    x = (char *) zalloc(v->start + strlen(val) + zlen - v->end + 1);
diff --git a/Test/D04parameter.ztst b/Test/D04parameter.ztst
index 6abba0ab3..908342e20 100644
--- a/Test/D04parameter.ztst
+++ b/Test/D04parameter.ztst
@@ -660,3 +660,19 @@
 >andsomekept
 >andsomekept
 
+  x=sprodj
+  x[-10]=scrumf
+  print $x
+0:Out of range negative scalar subscripts
+>scrumfsprodj
+
+  a=(some sunny day)
+  a[-10]=(we\'ll meet again)
+  print -l $a
+0:Out of range negative array subscripts
+>we'll
+>meet
+>again
+>some
+>sunny
+>day