[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 1/6] grep: avoid some size_t casts
From: |
Paul Eggert |
Subject: |
[PATCH 1/6] grep: avoid some size_t casts |
Date: |
Tue, 24 Aug 2021 00:45:36 -0700 |
This helps move the code away from unsigned types.
* src/grep.c (buf_has_encoding_errors, contains_encoding_error):
* src/searchutils.c (mb_goback):
Compare to MB_LEN_MAX, not to (size_t) -2. This is a bit safer
anyway, as grep relies on MB_LEN_MAX limits elsewhere.
* src/search.h (mb_clen): Compare to -2 before converting to size_t.
---
src/grep.c | 8 ++++----
src/search.h | 4 ++--
src/searchutils.c | 8 ++++----
3 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/src/grep.c b/src/grep.c
index 271b6b9..ed102d3 100644
--- a/src/grep.c
+++ b/src/grep.c
@@ -760,7 +760,7 @@ buf_has_encoding_errors (char *buf, size_t size)
for (char const *p = buf; (p = skip_easy_bytes (p)) < buf + size; p += clen)
{
clen = mbrlen (p, buf + size - p, &mbs);
- if ((size_t) -2 <= clen)
+ if (MB_LEN_MAX < clen)
return true;
}
@@ -2226,12 +2226,12 @@ static bool
contains_encoding_error (char const *pat, size_t patlen)
{
mbstate_t mbs = { 0 };
- size_t i, charlen;
+ size_t charlen;
- for (i = 0; i < patlen; i += charlen)
+ for (size_t i = 0; i < patlen; i += charlen)
{
charlen = mb_clen (pat + i, patlen - i, &mbs);
- if ((size_t) -2 <= charlen)
+ if (MB_LEN_MAX < charlen)
return true;
}
return false;
diff --git a/src/search.h b/src/search.h
index 4853583..6a5814a 100644
--- a/src/search.h
+++ b/src/search.h
@@ -78,8 +78,8 @@ extern void fgrep_to_grep_pattern (char **, size_t *);
SEARCH_INLINE size_t
mb_clen (char const *s, size_t n, mbstate_t *mbs)
{
- size_t len = localeinfo.sbclen[to_uchar (*s)];
- return len == (size_t) -2 ? mbrlen (s, n, mbs) : len;
+ signed char len = localeinfo.sbclen[to_uchar (*s)];
+ return len == -2 ? mbrlen (s, n, mbs) : len;
}
extern char const *input_filename (void);
diff --git a/src/searchutils.c b/src/searchutils.c
index 8058511..b63990a 100644
--- a/src/searchutils.c
+++ b/src/searchutils.c
@@ -68,8 +68,8 @@ kwsinit (bool mb_trans)
When returning zero, set *MB_START to CUR. When returning a
positive value, set *MB_START to the next boundary after CUR,
- or to END if there is no such boundary, and set *MBCLEN to the
- length of the preceding character. */
+ or to END if there is no such boundary, and if MBCLEN is nonnull
+ set *MBCLEN to the length of the preceding character. */
ptrdiff_t
mb_goback (char const **mb_start, size_t *mbclen, char const *cur,
char const *end)
@@ -92,7 +92,7 @@ mb_goback (char const **mb_start, size_t *mbclen, char const
*cur,
{
mbstate_t mbs = { 0 };
clen = mb_clen (cur - i, end - (cur - i), &mbs);
- if (i < clen && clen < (size_t) -2)
+ if (i < clen && clen <= MB_LEN_MAX)
{
p0 = cur - i;
p = p0 + clen;
@@ -107,7 +107,7 @@ mb_goback (char const **mb_start, size_t *mbclen, char
const *cur,
{
clen = mb_clen (p, end - p, &mbs);
- if ((size_t) -2 <= clen)
+ if (MB_LEN_MAX < clen)
{
/* An invalid sequence, or a truncated multibyte character.
Treat it as a single byte character. */
--
2.31.1
- [PATCH 1/6] grep: avoid some size_t casts,
Paul Eggert <=
- [PATCH 2/6] grep: omit unused maxd member, Paul Eggert, 2021/08/24
- [PATCH 3/6] grep: tweak mb_goback and comment it better, Paul Eggert, 2021/08/24
- [PATCH 4/6] grep: tweak wordchar_prev performance, Paul Eggert, 2021/08/24
- [PATCH 5/6] grep: tweak mb_goback performance, Paul Eggert, 2021/08/24
- [PATCH 6/6] grep: scan back thru UTF-8 a bit faster, Paul Eggert, 2021/08/24