svn commit: r334568 - head/usr.bin/indent
Piotr Pawel Stefaniak
pstef at FreeBSD.org
Sun Jun 3 17:03:57 UTC 2018
Author: pstef
Date: Sun Jun 3 17:03:55 2018
New Revision: 334568
URL: https://svnweb.freebsd.org/changeset/base/334568
Log:
indent(1): limit character classification functions' input to unsigned char
Modified:
head/usr.bin/indent/args.c
head/usr.bin/indent/indent.c
head/usr.bin/indent/io.c
head/usr.bin/indent/lexi.c
Modified: head/usr.bin/indent/args.c
==============================================================================
--- head/usr.bin/indent/args.c Sun Jun 3 16:52:30 2018 (r334567)
+++ head/usr.bin/indent/args.c Sun Jun 3 17:03:55 2018 (r334568)
@@ -217,7 +217,7 @@ scan_profile(FILE *f)
} else if (i == '/' && comment && p > buf && p[-1] == '*') {
p = buf + comment - 1;
comment = 0;
- } else if (isspace(i)) {
+ } else if (isspace((unsigned char)i)) {
if (p > buf && !comment)
break;
} else {
@@ -321,7 +321,7 @@ found:
break;
case PRO_INT:
- if (!isdigit(*param_start)) {
+ if (!isdigit((unsigned char)*param_start)) {
need_param:
errx(1, "%s: ``%s'' requires a parameter", option_source, p->p_name);
}
Modified: head/usr.bin/indent/indent.c
==============================================================================
--- head/usr.bin/indent/indent.c Sun Jun 3 16:52:30 2018 (r334567)
+++ head/usr.bin/indent/indent.c Sun Jun 3 17:03:55 2018 (r334568)
@@ -402,7 +402,7 @@ main(int argc, char **argv)
* if there was a newline resulting from the "{" before,
* it must be scanned now and ignored.
*/
- while (isspace((int)*buf_ptr)) {
+ while (isspace((unsigned char)*buf_ptr)) {
if (++buf_ptr >= buf_end)
fill_buffer();
if (*buf_ptr == '\n')
@@ -429,7 +429,7 @@ main(int argc, char **argv)
ps.search_brace = false;
goto check_type;
}
- while (sc_end > save_com && isblank((int)sc_end[-1])) {
+ while (sc_end > save_com && isblank((unsigned char)sc_end[-1])) {
sc_end--;
}
if (swallow_optional_blanklines ||
@@ -1070,7 +1070,7 @@ check_type:
e_code = chfont(&bodyf, &keywordf, e_code);
for (t_ptr = token; *t_ptr; ++t_ptr) {
CHECK_SIZE_CODE;
- *e_code++ = keywordf.allcaps && islower(*t_ptr)
+ *e_code++ = keywordf.allcaps && islower((unsigned char)*t_ptr)
? toupper(*t_ptr) : *t_ptr;
}
e_code = chfont(&keywordf, &bodyf, e_code);
Modified: head/usr.bin/indent/io.c
==============================================================================
--- head/usr.bin/indent/io.c Sun Jun 3 16:52:30 2018 (r334567)
+++ head/usr.bin/indent/io.c Sun Jun 3 17:03:55 2018 (r334568)
@@ -243,7 +243,7 @@ dump_line(void)
cur_col = 1;
++ps.out_lines;
}
- while (e_com > com_st && isspace(e_com[-1]))
+ while (e_com > com_st && isspace((unsigned char)e_com[-1]))
e_com--;
(void)pad_output(cur_col, target);
fwrite(com_st, e_com - com_st, 1, output);
@@ -638,9 +638,9 @@ parsefont(struct fstate *f, const char *s0)
memset(f, '\0', sizeof(*f));
while (*s) {
- if (isdigit(*s))
+ if (isdigit((unsigned char)*s))
f->size = f->size * 10 + *s - '0';
- else if (isupper(*s))
+ else if (isupper((unsigned char)*s))
if (f->font[0])
f->font[1] = *s;
else
Modified: head/usr.bin/indent/lexi.c
==============================================================================
--- head/usr.bin/indent/lexi.c Sun Jun 3 16:52:30 2018 (r334567)
+++ head/usr.bin/indent/lexi.c Sun Jun 3 17:03:55 2018 (r334568)
@@ -173,13 +173,15 @@ lexi(struct parser_state *state)
}
/* Scan an alphanumeric token */
- if (chartype[(int)*buf_ptr] == alphanum || (buf_ptr[0] == '.' && isdigit(buf_ptr[1]))) {
+ if (chartype[*buf_ptr & 127] == alphanum ||
+ (buf_ptr[0] == '.' && isdigit((unsigned char)buf_ptr[1]))) {
/*
* we have a character or number
*/
struct templ *p;
- if (isdigit(*buf_ptr) || (buf_ptr[0] == '.' && isdigit(buf_ptr[1]))) {
+ if (isdigit((unsigned char)*buf_ptr) ||
+ (buf_ptr[0] == '.' && isdigit((unsigned char)buf_ptr[1]))) {
enum base {
BASE_2, BASE_8, BASE_10, BASE_16
};
@@ -193,7 +195,7 @@ lexi(struct parser_state *state)
in_base = BASE_2;
else if (buf_ptr[1] == 'x' || buf_ptr[1] == 'X')
in_base = BASE_16;
- else if (isdigit(buf_ptr[1]))
+ else if (isdigit((unsigned char)buf_ptr[1]))
in_base = BASE_8;
}
switch (in_base) {
@@ -215,7 +217,7 @@ lexi(struct parser_state *state)
case BASE_16:
*e_token++ = *buf_ptr++;
*e_token++ = *buf_ptr++;
- while (isxdigit(*buf_ptr)) {
+ while (isxdigit((unsigned char)*buf_ptr)) {
CHECK_SIZE_TOKEN;
*e_token++ = *buf_ptr++;
}
@@ -230,7 +232,7 @@ lexi(struct parser_state *state)
}
CHECK_SIZE_TOKEN;
*e_token++ = *buf_ptr++;
- if (!isdigit(*buf_ptr) && *buf_ptr != '.') {
+ if (!isdigit((unsigned char)*buf_ptr) && *buf_ptr != '.') {
if ((*buf_ptr != 'E' && *buf_ptr != 'e') || seenexp)
break;
else {
@@ -264,7 +266,7 @@ lexi(struct parser_state *state)
}
}
else
- while (chartype[(int)*buf_ptr] == alphanum || *buf_ptr == BACKSLASH) {
+ while (chartype[*buf_ptr & 127] == alphanum || *buf_ptr == BACKSLASH) {
/* fill_buffer() terminates buffer with newline */
if (*buf_ptr == BACKSLASH) {
if (*(buf_ptr + 1) == '\n') {
@@ -557,7 +559,7 @@ stop_lit:
if (state->in_or_st)
state->block_init = 1;
#ifdef undef
- if (chartype[*buf_ptr] == opchar) { /* we have two char assignment */
+ if (chartype[*buf_ptr & 127] == opchar) { /* we have two char assignment */
e_token[-1] = *buf_ptr++;
if ((e_token[-1] == '<' || e_token[-1] == '>') && e_token[-1] == *buf_ptr)
*e_token++ = *buf_ptr++;
More information about the svn-src-head
mailing list