From e8edd42f7ff0fefbf74db7fbab2d242852b6bce6 Mon Sep 17 00:00:00 2001
From: Peter Stephenson
Date: Sun, 2 Jul 2017 20:29:00 +0100
Subject: 22760: fix partial string length reports with NO_MULTIBYTE
---
ChangeLog | 5 +++++
Src/utils.c | 2 +-
Test/D04parameter.ztst | 20 ++++++++++++++++++++
3 files changed, 26 insertions(+), 1 deletion(-)
diff --git a/ChangeLog b/ChangeLog
index 7ed5ba565..c843d8856 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2017-07-02 Peter Stephenson
+
+ * 22760: Src/utils.c, Test/D04parameter.ztst: NO_MULTIBYTE
+ partial string lengths were reported as full string lengths.
+
2017-06-27 Peter Stephenson
* 41368: Src/Zle/compctl.c: missing unqueue_signals().
diff --git a/Src/utils.c b/Src/utils.c
index acb891d82..1b80e8cb0 100644
--- a/Src/utils.c
+++ b/Src/utils.c
@@ -5417,7 +5417,7 @@ mb_metastrlenend(char *ptr, int width, char *eptr)
int num, num_in_char, complete;
if (!isset(MULTIBYTE))
- return ztrlen(ptr);
+ return eptr ? (int)(eptr - ptr) : ztrlen(ptr);
laststart = ptr;
ret = MB_INVALID;
diff --git a/Test/D04parameter.ztst b/Test/D04parameter.ztst
index d5798b5b9..3c93990f1 100644
--- a/Test/D04parameter.ztst
+++ b/Test/D04parameter.ztst
@@ -783,16 +783,36 @@
0:${(R)...}
>is the ,
+ # Although there's no reliance on multibyte here, the
+ # code exercised is different, so test both paths in the following group.
+ # If the shell isn't multibyte capable the tests are the same;
+ # that's not a problem.
# This (1) doesn't work with // or /
# (2) perhaps ought to be 18, to be consistent with normal zsh
# substring indexing and with backreferences.
print ${(BES)string##white}
+ (unsetopt multibyte; print ${(BES)string##white})
0:${(BE...)...}
+>14 19
>14 19
print ${(NS)string##white}
+ (unsetopt multibyte; print ${(NS)string##white})
0:${(N)...}
>5
+>5
+
+ fn() {
+ emulate -L zsh
+ local a=abcdef
+ print ${(SNBE)a#abcd}
+ unsetopt multibyte
+ print ${(SNBE)a#abcd}
+ }
+ fn
+0:${(BEN)...} again, with match
+>1 5 4
+>1 5 4
string='abcdefghijklmnopqrstuvwxyz'
print ${${string%[aeiou]*}/(#m)?(#e)/${(U)MATCH}}
--
cgit 1.4.1