summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--Src/subst.c12
-rw-r--r--Test/D07multibyte.ztst32
3 files changed, 46 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 67dcc2abd..b4304be4d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2007-02-10 Peter Stephenson <p.w.stephenson@ntlworld.com>
+
+ * 23162: Src/subst.c, D07multibyte.ztst: ${(#)x} didn't
+ metafy the result, giving nonsense if x was somewhere between
+ 128 and 160.
+
2007-02-08 Peter Stephenson <pws@csr.com>
* unposted: README: add note on 23159 to incompatibilities
diff --git a/Src/subst.c b/Src/subst.c
index be7b5321c..acd121e78 100644
--- a/Src/subst.c
+++ b/Src/subst.c
@@ -1193,21 +1193,25 @@ static char *
substevalchar(char *ptr)
{
zlong ires = mathevali(ptr);
+ int len;
if (errflag)
return NULL;
+#ifdef MULTIBYTE_SUPPORT
if (isset(MULTIBYTE) && ires > 127) {
char buf[10];
- int dummy;
/* inefficient: should separate out \U handling from getkeystring */
sprintf(buf, "\\U%.8x", (unsigned int)ires);
- return getkeystring(buf, &dummy, GETKEYS_BINDKEY, NULL);
- } else {
+ ptr = getkeystring(buf, &len, GETKEYS_BINDKEY, NULL);
+ } else
+#endif
+ {
ptr = zhalloc(2);
+ len = 1;
sprintf(ptr, "%c", (int)ires);
- return ptr;
}
+ return metafy(ptr, len, META_USEHEAP);
}
/* parameter substitution */
diff --git a/Test/D07multibyte.ztst b/Test/D07multibyte.ztst
index c3a24c067..07479539b 100644
--- a/Test/D07multibyte.ztst
+++ b/Test/D07multibyte.ztst
@@ -326,3 +326,35 @@
0:Multibyte characters in print sorting
>HAH HEH HÉH HÈH HUH
>HAH HEH HUH HÈH HÉH
+
+# These are control characters in Unicode, so don't show up.
+# We just want to check they're not being treated as tokens.
+ for x in {128..150}; do
+ print ${(#)x}
+ done | while read line; do
+ print ${#line} $(( #line ))
+ done
+0:evaluated character number with multibyte characters
+>1 128
+>1 129
+>1 130
+>1 131
+>1 132
+>1 133
+>1 134
+>1 135
+>1 136
+>1 137
+>1 138
+>1 139
+>1 140
+>1 141
+>1 142
+>1 143
+>1 144
+>1 145
+>1 146
+>1 147
+>1 148
+>1 149
+>1 150