diff options
| author | Pedro F. Giffuni <pfg@FreeBSD.org> | 2019-02-10 23:45:14 +0000 |
|---|---|---|
| committer | Pedro F. Giffuni <pfg@FreeBSD.org> | 2019-02-10 23:45:14 +0000 |
| commit | 8b87f25173b72f04568a1dfedff70b9c797a9d8e (patch) | |
| tree | f60679a220370cfd07c89a43c8bf0cfc17372c6b /gnu/usr.bin | |
| parent | 7a1b6d7314c484a82d371254bb9a0c7c450dca8f (diff) | |
Notes
Diffstat (limited to 'gnu/usr.bin')
| -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; } |
