Redo previous in a different way; cast the character held in int variable
as unsigned char just before passing isalnum() in ISWORD() rather than fetching it as unsigned char. It is ok since EOF is never passed to ISWORD() (though it will be a bit inefficient.) Addresses PR#24929.
This commit is contained in:
parent
678a450535
commit
d43ce6c183
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: engine.c,v 1.16 2004/03/12 22:34:09 enami Exp $ */
|
||||
/* $NetBSD: engine.c,v 1.17 2004/03/26 22:42:17 enami Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1992, 1993, 1994
|
||||
|
@ -622,23 +622,22 @@ sopno lev; /* PLUS nesting level */
|
|||
return(NULL);
|
||||
break;
|
||||
case OBOW:
|
||||
if (((sp == m->beginp && !(m->eflags®_NOTBOL)) ||
|
||||
(sp < m->endp && *(sp - 1) == '\n' &&
|
||||
(m->g->cflags®_NEWLINE)) ||
|
||||
(sp > m->beginp &&
|
||||
!ISWORD(*(unsigned char *)(sp - 1)))) &&
|
||||
(sp < m->endp && ISWORD(*(unsigned char *)sp)))
|
||||
if (( (sp == m->beginp && !(m->eflags®_NOTBOL)) ||
|
||||
(sp < m->endp && *(sp-1) == '\n' &&
|
||||
(m->g->cflags®_NEWLINE)) ||
|
||||
(sp > m->beginp &&
|
||||
!ISWORD(*(sp-1))) ) &&
|
||||
(sp < m->endp && ISWORD(*sp)) )
|
||||
{ /* yes */ }
|
||||
else
|
||||
return(NULL);
|
||||
break;
|
||||
case OEOW:
|
||||
if (((sp == m->endp && !(m->eflags®_NOTEOL)) ||
|
||||
(sp < m->endp && *sp == '\n' &&
|
||||
(m->g->cflags®_NEWLINE)) ||
|
||||
(sp < m->endp && !ISWORD(*(unsigned char *)sp))) &&
|
||||
(sp > m->beginp &&
|
||||
ISWORD(*(unsigned char *)(sp - 1))))
|
||||
if (( (sp == m->endp && !(m->eflags®_NOTEOL)) ||
|
||||
(sp < m->endp && *sp == '\n' &&
|
||||
(m->g->cflags®_NEWLINE)) ||
|
||||
(sp < m->endp && !ISWORD(*sp)) ) &&
|
||||
(sp > m->beginp && ISWORD(*(sp-1))) )
|
||||
{ /* yes */ }
|
||||
else
|
||||
return(NULL);
|
||||
|
@ -779,7 +778,7 @@ sopno stopst;
|
|||
states fresh = m->fresh;
|
||||
states tmp = m->tmp;
|
||||
char *p = start;
|
||||
int c = (start == m->beginp) ? OUT : *(unsigned char *)(start - 1);
|
||||
int c = (start == m->beginp) ? OUT : *(start-1);
|
||||
int lastc; /* previous c */
|
||||
int flagch;
|
||||
int i;
|
||||
|
@ -798,7 +797,7 @@ sopno stopst;
|
|||
for (;;) {
|
||||
/* next character */
|
||||
lastc = c;
|
||||
c = (p == m->endp) ? OUT : *(unsigned char *)p;
|
||||
c = (p == m->endp) ? OUT : *p;
|
||||
if (EQ(st, fresh))
|
||||
coldp = p;
|
||||
|
||||
|
@ -874,7 +873,7 @@ sopno stopst;
|
|||
states empty = m->empty;
|
||||
states tmp = m->tmp;
|
||||
char *p = start;
|
||||
int c = (start == m->beginp) ? OUT : *(unsigned char *)(start - 1);
|
||||
int c = (start == m->beginp) ? OUT : *(start-1);
|
||||
int lastc; /* previous c */
|
||||
int flagch;
|
||||
int i;
|
||||
|
@ -893,7 +892,7 @@ sopno stopst;
|
|||
for (;;) {
|
||||
/* next character */
|
||||
lastc = c;
|
||||
c = (p == m->endp) ? OUT : *(unsigned char *)p;
|
||||
c = (p == m->endp) ? OUT : *p;
|
||||
|
||||
/* is there an EOL and/or BOL between lastc and c? */
|
||||
flagch = '\0';
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: regex2.h,v 1.10 2003/08/07 16:43:20 agc Exp $ */
|
||||
/* $NetBSD: regex2.h,v 1.11 2004/03/26 22:42:17 enami Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1992, 1993, 1994
|
||||
|
@ -206,4 +206,4 @@ struct re_guts {
|
|||
|
||||
/* misc utilities */
|
||||
#define OUT (CHAR_MAX+1) /* a non-character value */
|
||||
#define ISWORD(c) (isalnum(c) || (c) == '_')
|
||||
#define ISWORD(c) (isalnum((unsigned char)c) || (c) == '_')
|
||||
|
|
Loading…
Reference in New Issue