diff options
author | Pedro F. Giffuni <pfg@FreeBSD.org> | 2019-01-10 02:59:19 +0000 |
---|---|---|
committer | Pedro F. Giffuni <pfg@FreeBSD.org> | 2019-01-10 02:59:19 +0000 |
commit | aa52c719ea10ab575fa5c5245b70c4e117477fd4 (patch) | |
tree | f4fb9c20c8a7db46dc55dd41225f6fc69b007c5f /gnu/usr.bin/grep/search.c | |
parent | 3b1522c229fb6ca97a6a141e848bf1cfd76ade44 (diff) | |
download | src-aa52c719ea10ab575fa5c5245b70c4e117477fd4.tar.gz src-aa52c719ea10ab575fa5c5245b70c4e117477fd4.zip |
grep(1) outputs NOT-matched lines with multi-byte characters
PR 113343
MFC after: 2 months
Notes
Notes:
svn path=/head/; revision=342910
Diffstat (limited to 'gnu/usr.bin/grep/search.c')
-rw-r--r-- | gnu/usr.bin/grep/search.c | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/gnu/usr.bin/grep/search.c b/gnu/usr.bin/grep/search.c index 96ee18197434..23fc32f8feba 100644 --- a/gnu/usr.bin/grep/search.c +++ b/gnu/usr.bin/grep/search.c @@ -401,9 +401,12 @@ EGexecute (char const *buf, size_t size, size_t *match_size, int exact) } if (mlen == (size_t) -2) - /* Offset points inside multibyte character: - * no good. */ - break; + { + /* Offset points inside multibyte character: + * no good. */ + memset (&mbs, '\0', sizeof (mbstate_t)); + break; + } beg += mlen; bytes_left -= mlen; @@ -463,9 +466,12 @@ EGexecute (char const *buf, size_t size, size_t *match_size, int exact) } if (mlen == (size_t) -2) - /* Offset points inside multibyte character: - * no good. */ - break; + { + /* Offset points inside multibyte character: + * no good. */ + memset (&mbs, '\0', sizeof (mbstate_t)); + break; + } beg += mlen; bytes_left -= mlen; @@ -926,15 +932,21 @@ Fexecute (char const *buf, size_t size, size_t *match_size, int exact) } if (mlen == (size_t) -2) - /* Offset points inside multibyte character: no good. */ - break; + { + /* Offset points inside multibyte character: no good. */ + memset (&mbs, '\0', sizeof (mbstate_t)); + break; + } beg += mlen; bytes_left -= mlen; } if (bytes_left) - continue; + { + beg += bytes_left; + continue; + } } else #endif /* MBS_SUPPORT */ @@ -1052,6 +1064,7 @@ Fexecute (char const *buf, size_t size, size_t *match_size, int exact) { /* Offset points inside multibyte character: * no good. */ + memset (&mbs, '\0', sizeof (mbstate_t)); break; } |