Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Pattern matching operations produces incorrect results when MULTIBYTE is not set



On Fri, 30 Jun 2017 19:35:01 -0700
guuu@xxxxxxxxxxx wrote:
> When MULTIBYTE support turned off, all the indexing and counting of pattern
> matching operations becomes wrong.

Umm, if I didn't know better I'd think you were saying that was a bad
thing...

This was an oversight when extending the capabilities of a function; the
NO_MULITBYTE case got overlooked.  I've added tests.

pws

diff --git a/Src/utils.c b/Src/utils.c
index acb891d..1b80e8c 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 d5798b5..3c93990 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}}



Messages sorted by: Reverse Date, Date, Thread, Author