From ea3351c49610355512672ab478c715ba3cb92aef Mon Sep 17 00:00:00 2001 From: Mikael Magnusson Date: Fri, 12 Mar 2021 03:50:01 +0100 Subject: 48202 + 48366: Fix handling of NUL bytes in zexpandtabs multibyte version --- ChangeLog | 6 ++++++ Src/utils.c | 5 ++++- Test/B03print.ztst | 9 +++++---- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 237a1bb3b..c9e305bde 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2021-04-01 Mikael Magnusson + + * 48202 (+ 48366 test fix from Jun): Src/utils.c, + Test/B03print.ztst: Fix handling of NUL bytes in zexpandtabs + multibyte version + 2021-03-31 Oliver Kiddle * github #74: Caleb Maclennan: Completion/Unix/Command/_vcsh: diff --git a/Src/utils.c b/Src/utils.c index 2a8d677a7..1ac064a4e 100644 --- a/Src/utils.c +++ b/Src/utils.c @@ -5912,8 +5912,11 @@ zexpandtabs(const char *s, int len, int width, int startpos, FILE *fout, memset(&mbs, 0, sizeof(mbs)); s++; len--; - } else if (ret == MB_INCOMPLETE) { + } else if (ret == MB_INCOMPLETE || /* incomplete at end --- assume likewise, best we've got */ + ret == 0) { + /* NUL character returns 0, which would loop infinitely, so advance + * one byte in this case too */ s++; len--; } else { diff --git a/Test/B03print.ztst b/Test/B03print.ztst index 563423934..4d2cf9764 100644 --- a/Test/B03print.ztst +++ b/Test/B03print.ztst @@ -304,15 +304,16 @@ foo=$'one\ttwo\tthree\tfour\n' foo+=$'\tone\ttwo\tthree\tfour\n' foo+=$'\t\tone\t\ttwo\t\tthree\t\tfour' - print -x4 $foo - print -X4 $foo + foo+='\0' # regression test for multibyte tab expand + print -x4 $foo | tr '\0' Z # avoid raw nul byte in expected output below + print -X4 $foo | tr '\0' Z 0:Tab expansion by print >one two three four > one two three four -> one two three four +> one two three fourZ >one two three four > one two three four -> one two three four +> one two three fourZ unset foo print -v foo once more -- cgit 1.4.1