diff options
author | Mikael Magnusson <mikachu@gmail.com> | 2021-03-12 03:50:01 +0100 |
---|---|---|
committer | Mikael Magnusson <mikachu@gmail.com> | 2021-04-01 09:50:52 +0200 |
commit | ea3351c49610355512672ab478c715ba3cb92aef (patch) | |
tree | c9abcd8fe0a157a0980d09c6fc62dd039f186852 | |
parent | 3afdfef31cf5da224c2e69bb0b942412cbf78b59 (diff) | |
download | zsh-ea3351c49610355512672ab478c715ba3cb92aef.tar.gz zsh-ea3351c49610355512672ab478c715ba3cb92aef.tar.xz zsh-ea3351c49610355512672ab478c715ba3cb92aef.zip |
48202 + 48366: Fix handling of NUL bytes in zexpandtabs multibyte version
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | Src/utils.c | 5 | ||||
-rw-r--r-- | 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 <mikachu@gmail.com> + + * 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 <opk@zsh.org> * 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 |