avoid undefined behaviour when using ctype(3) functions in relex()
Because NCHARS is (256+3) cc->cc_func(i) was called with 256, 257 and 258 as argument leading to possible undefined behaviour (at least on NetBSD with non-C locale (e.g. `en_US.UTF-8') this led to only honoring one `[:...:]' character class in bracket expressions). Fix #11
This commit is contained in:
parent
2dc7e5ff1a
commit
05014f5b9e
3
b.c
3
b.c
@ -27,6 +27,7 @@ THIS SOFTWARE.
|
||||
#define DEBUG
|
||||
|
||||
#include <ctype.h>
|
||||
#include <limits.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
@ -823,7 +824,7 @@ int relex(void) /* lexical analyzer for reparse */
|
||||
if (cc->cc_name != NULL && prestr[1 + cc->cc_namelen] == ':' &&
|
||||
prestr[2 + cc->cc_namelen] == ']') {
|
||||
prestr += cc->cc_namelen + 3;
|
||||
for (i = 0; i < NCHARS; i++) {
|
||||
for (i = 0; i <= UCHAR_MAX; i++) {
|
||||
if (!adjbuf((char **) &buf, &bufsz, bp-buf+1, 100, (char **) &bp, "relex2"))
|
||||
FATAL("out of space for reg expr %.10s...", lastre);
|
||||
if (cc->cc_func(i)) {
|
||||
|
Loading…
Reference in New Issue
Block a user