summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2012-04-25 09:31:57 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2012-04-25 09:31:57 +0000
commitc335b7f0a11d8af8035fc49a743d9dea92766342 (patch)
tree0f4a7b6882a5c1e896401116c010b0c1a8eca972
parent3e05817b7758defc008ce240235cf3174a88d4f3 (diff)
downloadzsh-c335b7f0a11d8af8035fc49a743d9dea92766342.tar.gz
zsh-c335b7f0a11d8af8035fc49a743d9dea92766342.zip
30455: remove max array length test
-rw-r--r--ChangeLog6
-rw-r--r--NEWS19
-rw-r--r--Src/params.c13
3 files changed, 31 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index 2e6fd04df..94e46debc 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2012-04-25 Peter Stephenson <pws@csr.com>
+
+ * 30455: NEWS, Src/params.c: remove max array length test.
+
2012-04-25 Mikael Magnusson <mikachu@gmail.com>
* 30429: Completion/Unix/Command/_init_d: Avoid error when the
@@ -16246,5 +16250,5 @@
*****************************************************
* This is used by the shell to define $ZSH_PATCHLEVEL
-* $Revision: 1.5642 $
+* $Revision: 1.5643 $
*****************************************************
diff --git a/NEWS b/NEWS
index 804f3abf8..23097b6aa 100644
--- a/NEWS
+++ b/NEWS
@@ -52,31 +52,38 @@ Expansion (parameters, globbing, etc.) and redirection
This is useful for expanding paths with many variable components as
commonly found in software development.
-- Parameter expansion has the ${NAME:OFFSET} and ${NAME:OFFSET:LENGTH}
+- Parameter substitution has the ${NAME:OFFSET} and ${NAME:OFFSET:LENGTH}
syntax for compatibility with other shells (and zero-based indexing
is used to enhance compatibility). LENGTH may be negative to count
from the end.
-- The parameter expansion flag (D) abbreviates directories in parameters
+- The arbitrary limit on parameter subscripts (262144) has been removed.
+ As it was not configurable and tested in an inconvenient place it
+ was deemed preferable to remove it completely. The limit was originally
+ introduced to prevent accidental creation of a large parameter array
+ by typos that generated assignments along the lines of "12345678=0".
+ The general advice is not to do that.
+
+- The parameter substitution flag (D) abbreviates directories in parameters
using the familiar ~ form.
-- The parameter expansion flag (g) can take delimited arguments o, e and
+- The parameter substitution flag (g) can take delimited arguments o, e and
c to provide echo- and print-style expansion: (g::) provides basic
echo-style expansion; (g:e:) provides the extended capabilities of
print; (g:o:) provides octal escapes without a leading zero; (g:c:)
additionally expands "^c" style control characters as for bindkey.
Options may be combined, e.g. (g:eoc:).
-- The parameter expansion flag (m) indicates that string lengths used
+- The parameter substitution flag (m) indicates that string lengths used
calculated by the (l) and (r) flags or the # operator should take
account of the printing width of characters in multibyte mode, whether
0, 1 or more. (mm) causes printing characters to count as 1 and
non-printing chracters to count as 0.
-- The parameter expansion flag (q-) picks the most minimal way of
+- The parameter substitution flag (q-) picks the most minimal way of
quoting the parameter words, to make the result as readable as possible.
-- The parameter expansion flag (Z), a variant of (z), takes arguments
+- The parameter substitution flag (Z), a variant of (z), takes arguments
describing how to split a variable using shell syntax: (Z:c:) parses
comments as strings (the default is not to treat comment characters
specially); (Z:C:) parses comments and strips them; (Z:n:) treats
diff --git a/Src/params.c b/Src/params.c
index 24062e03a..966e3afcc 100644
--- a/Src/params.c
+++ b/Src/params.c
@@ -1905,6 +1905,18 @@ fetchvalue(Value v, char **pptr, int bracks, int flags)
if (!bracks && *s)
return NULL;
*pptr = s;
+#if 0
+ /*
+ * Check for large subscripts that might be erroneous.
+ * This code is too gross in several ways:
+ * - the limit is completely arbitrary
+ * - the test vetoes operations on existing arrays
+ * - it's not at all clear a general test on large arrays of
+ * this kind is any use.
+ *
+ * Until someone comes up with workable replacement code it's
+ * therefore commented out.
+ */
if (v->start > MAX_ARRLEN) {
zerr("subscript too %s: %d", "big", v->start + !isset(KSHARRAYS));
return NULL;
@@ -1921,6 +1933,7 @@ fetchvalue(Value v, char **pptr, int bracks, int flags)
zerr("subscript too %s: %d", "small", v->end);
return NULL;
}
+#endif
return v;
}