diff options
author | tjr <tjr@FreeBSD.org> | 2004-06-27 10:35:28 +0000 |
---|---|---|
committer | tjr <tjr@FreeBSD.org> | 2004-06-27 10:35:28 +0000 |
commit | 7c81a9a35ed13623ee05aad76ac46e938ed8e357 (patch) | |
tree | 510573a330ac6923a31c63863e5a688b9e786235 /usr.bin/cut | |
parent | bf8b1fec3a0ce5222257be036648762be481062e (diff) | |
download | FreeBSD-src-7c81a9a35ed13623ee05aad76ac46e938ed8e357.zip FreeBSD-src-7c81a9a35ed13623ee05aad76ac46e938ed8e357.tar.gz |
Make the handling of invalid multibyte sequences more robust by using
mbrlen() instead of mblen().
Diffstat (limited to 'usr.bin/cut')
-rw-r--r-- | usr.bin/cut/cut.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/usr.bin/cut/cut.c b/usr.bin/cut/cut.c index b8bf0b3..0447db0 100644 --- a/usr.bin/cut/cut.c +++ b/usr.bin/cut/cut.c @@ -51,6 +51,7 @@ __FBSDID("$FreeBSD$"); #include <stdlib.h> #include <string.h> #include <unistd.h> +#include <wchar.h> int bflag; int cflag; @@ -239,15 +240,18 @@ b_n_cut(FILE *fp, const char *fname) size_t col, i, lbuflen; char *lbuf; int canwrite, clen, warned; + mbstate_t mbs; + memset(&mbs, 0, sizeof(mbs)); warned = 0; while ((lbuf = fgetln(fp, &lbuflen)) != NULL) { for (col = 0; lbuflen > 0; col += clen) { - if ((clen = mblen(lbuf, lbuflen)) < 0) { + if ((clen = mbrlen(lbuf, lbuflen, &mbs)) < 0) { if (!warned) { warn("%s", fname); warned = 1; } + memset(&mbs, 0, sizeof(mbs)); clen = 1; } if (clen == 0 || *lbuf == '\n') |