From: Omar Polo Subject: Re: unsigned char cast for is* ctype.h macros To: Omar Polo Cc: gameoftrees@openbsd.org Date: Thu, 17 Nov 2022 10:26:41 +0100 On 2022/11/17 09:39:32 +0100, Omar Polo wrote: > this should 'fix' them all, except for the various parse.y. A grep in > usr.sbin shows that noone casts there. (these calls are present in > the parse.y files and not added by yacc.) > > the ones in diff are maybe a bit redundant, except for one or two case > all should already pass uint8_t and/or unsigned char, changing just in > case in the future the types will change. > > (if ok i'll commit the diff bits separately to diff.git and then sync > as usual.) forgot to catch an isalpha in diff_output.c diff /home/op/w/gotd commit - c2a4f618fa3c9683fbb5f384b117f7e45a041122 path + /home/op/w/gotd blob - 238ecb9d0ee975efd8eacc55de14b8cfb69792de file + lib/diff_atomize_text.c --- lib/diff_atomize_text.c +++ lib/diff_atomize_text.c @@ -69,7 +69,7 @@ diff_data_atomize_text_lines_fd(struct diff_data *d) while (eol == 0 && i < r) { if (buf[i] != '\r' && buf[i] != '\n') { if (!ignore_whitespace - || !isspace(buf[i])) + || !isspace((unsigned char)buf[i])) hash = diff_atom_hash_update( hash, buf[i]); if (buf[i] == '\0') @@ -142,7 +142,7 @@ diff_data_atomize_text_lines_mmap(struct diff_data *d) while (line_end < end && *line_end != '\r' && *line_end != '\n') { if (!ignore_whitespace - || !isspace(*line_end)) + || !isspace((unsigned char)*line_end)) hash = diff_atom_hash_update(hash, *line_end); if (*line_end == '\0') embedded_nul = true; blob - 26fa788bccf6fc4e54a3c2efe5e6a389a1d34032 file + lib/diff_main.c --- lib/diff_main.c +++ lib/diff_main.c @@ -62,11 +62,11 @@ buf_cmp(const unsigned char *left, size_t left_len, unsigned char cl = left[il]; unsigned char cr = right[ir]; - if (isspace(cl) && il < left_len) { + if (isspace((unsigned char)cl) && il < left_len) { il++; continue; } - if (isspace(cr) && ir < right_len) { + if (isspace((unsigned char)cr) && ir < right_len) { ir++; continue; } @@ -80,12 +80,12 @@ buf_cmp(const unsigned char *left, size_t left_len, } while (il < left_len) { unsigned char cl = left[il++]; - if (!isspace(cl)) + if (!isspace((unsigned char)cl)) return 1; } while (ir < right_len) { unsigned char cr = right[ir++]; - if (!isspace(cr)) + if (!isspace((unsigned char)cr)) return -1; } blob - bc44a51ea36b8a3a7cd5581e6787fcdda23168c6 file + lib/diff_output.c --- lib/diff_output.c +++ lib/diff_output.c @@ -262,7 +262,7 @@ is_function_prototype(unsigned char ch) static bool is_function_prototype(unsigned char ch) { - return (isalpha(ch) || ch == '_' || ch == '$'); + return (isalpha((unsigned char) ch) || ch == '_' || ch == '$'); } #define begins_with(s, pre) (strncmp(s, pre, sizeof(pre)-1) == 0) blob - a487dffb531fb051aa859f3c1ac13816fdfcd926 file + lib/gitproto.c --- lib/gitproto.c +++ lib/gitproto.c @@ -54,13 +54,13 @@ tokenize_line(char **tokens, char *line, int len, int tokens[i] = NULL; for (i = 0; n < len && i < maxtokens; i++) { - while (isspace(*line)) { + while (isspace((unsigned char)*line)) { line++; n++; } p = line; while (*line != '\0' && n < len && - (!isspace(*line) || i == maxtokens - 1)) { + (!isspace((unsigned char)*line) || i == maxtokens - 1)) { line++; n++; } blob - 114e0ca8c6f110af5f8ebfd87ac1cdd552fbc92c file + lib/object_parse.c --- lib/object_parse.c +++ lib/object_parse.c @@ -410,12 +410,14 @@ parse_gmtoff(time_t *gmtoff, const char *tzstr) else if (*p != '+') return got_error(GOT_ERR_BAD_OBJ_DATA); p++; - if (!isdigit(*p) && !isdigit(*(p + 1))) + if (!isdigit((unsigned char)*p) && + !isdigit((unsigned char)*(p + 1))) return got_error(GOT_ERR_BAD_OBJ_DATA); h = (((*p - '0') * 10) + (*(p + 1) - '0')); p += 2; - if (!isdigit(*p) && !isdigit(*(p + 1))) + if (!isdigit((unsigned char)*p) && + !isdigit((unsigned char)*(p + 1))) return got_error(GOT_ERR_BAD_OBJ_DATA); m = ((*p - '0') * 10) + (*(p + 1) - '0'); blob - 52cedcef2588aa0c074d4d486c05e33a3bac7eb4 file + lib/pkt.c --- lib/pkt.c +++ lib/pkt.c @@ -144,7 +144,7 @@ got_pkt_readpkt(int *outlen, int fd, char *buf, int bu if (chattygot > 1) { fprintf(stderr, "%s: readpkt: %zd:\t", getprogname(), n); for (i = 0; i < n; i++) { - if (isprint(buf[i])) + if (isprint((unsigned char)buf[i])) fputc(buf[i], stderr); else fprintf(stderr, "[0x%.2x]", buf[i]); @@ -179,7 +179,7 @@ got_pkt_writepkt(int fd, char *buf, int nbuf, int chat if (chattygot > 1) { fprintf(stderr, "%s: writepkt: %s:\t", getprogname(), len); for (i = 0; i < nbuf; i++) { - if (isprint(buf[i])) + if (isprint((unsigned char)buf[i])) fputc(buf[i], stderr); else fprintf(stderr, "[0x%.2x]", buf[i]); blob - 4fa55782d6cfa72a92ffedfb310e3ac0e508e55c file + libexec/got-fetch-pack/got-fetch-pack.c --- libexec/got-fetch-pack/got-fetch-pack.c +++ libexec/got-fetch-pack/got-fetch-pack.c @@ -208,7 +208,7 @@ fetch_error(const char *buf, size_t len) size_t i; for (i = 0; i < len && i < sizeof(msg) - 1; i++) { - if (!isprint(buf[i])) + if (!isprint((unsigned char)buf[i])) return got_error_msg(GOT_ERR_BAD_PACKET, "non-printable error message received from server"); msg[i] = buf[i]; blob - 7069d8b17d0928e260d85033e81ff7ac104c27dd file + libexec/got-send-pack/got-send-pack.c --- libexec/got-send-pack/got-send-pack.c +++ libexec/got-send-pack/got-send-pack.c @@ -181,7 +181,7 @@ send_error(const char *buf, size_t len) size_t i; for (i = 0; i < len && i < sizeof(msg) - 1; i++) { - if (!isprint(buf[i])) + if (!isprint((unsigned char)buf[i])) return got_error_msg(GOT_ERR_BAD_PACKET, "non-printable error message received from server"); msg[i] = buf[i];