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 /Src/utils.c | |
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
Diffstat (limited to 'Src/utils.c')
-rw-r--r-- | Src/utils.c | 5 |
1 files changed, 4 insertions, 1 deletions
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 { |