Add missing casts to unsigned char inside ctype functions.

These are necessary because the argument to a ctype function cannot be
a negative value unless it's EOF. Thanks to Cygwin gcc for pointing
out the mistake, and to Patrick Shaughnessy for this patch.
This commit is contained in:
Simon Tatham
2016-02-01 19:06:36 +00:00
parent 1d9d6cbf12
commit 59705cccd1

View File

@ -697,17 +697,17 @@ static char *validate_desc(const game_params *params, const char *desc)
int w = params->w, h = params->h, wh = w*h, squares = 0; int w = params->w, h = params->h, wh = w*h, squares = 0;
for (/* nop */; *desc; ++desc) { for (/* nop */; *desc; ++desc) {
if (islower(*desc)) { if (islower((unsigned char)*desc)) {
squares += *desc - 'a' + 1; squares += *desc - 'a' + 1;
} else if (isdigit(*desc)) { } else if (isdigit((unsigned char)*desc)) {
if (*desc > '4') { if (*desc > '4') {
static char buf[] = "Invalid (too large) number: '5'"; static char buf[] = "Invalid (too large) number: '5'";
assert (isdigit(buf[lenof(buf) - 3])); assert (isdigit((unsigned char)buf[lenof(buf) - 3]));
buf[lenof(buf) - 3] = *desc; /* ... or 6, 7, 8, 9 :-) */ buf[lenof(buf) - 3] = *desc; /* ... or 6, 7, 8, 9 :-) */
return buf; return buf;
} }
++squares; ++squares;
} else if (isprint(*desc)) { } else if (isprint((unsigned char)*desc)) {
static char buf[] = "Invalid character in data: '?'"; static char buf[] = "Invalid character in data: '?'";
buf[lenof(buf) - 3] = *desc; buf[lenof(buf) - 3] = *desc;
return buf; return buf;
@ -732,8 +732,8 @@ static game_state *new_game(midend *me, const game_params *params,
setmem(state->shared->clues, EMPTY, wh); setmem(state->shared->clues, EMPTY, wh);
for (i = 0; *desc; ++desc) { for (i = 0; *desc; ++desc) {
if (isdigit(*desc)) state->shared->clues[i++] = *desc - '0'; if (isdigit((unsigned char)*desc)) state->shared->clues[i++] = *desc - '0';
else if (isalpha(*desc)) i += *desc - 'a' + 1; else if (isalpha((unsigned char)*desc)) i += *desc - 'a' + 1;
} }
snewa(state->borders, wh); snewa(state->borders, wh);