| 322 |
|
|
| 323 |
/* Function arguments that may change */ |
/* Function arguments that may change */ |
| 324 |
|
|
| 325 |
const uschar *Xeptr; |
USPTR Xeptr; |
| 326 |
const uschar *Xecode; |
const uschar *Xecode; |
| 327 |
const uschar *Xmstart; |
USPTR Xmstart; |
| 328 |
int Xoffset_top; |
int Xoffset_top; |
| 329 |
long int Xims; |
long int Xims; |
| 330 |
eptrblock *Xeptrb; |
eptrblock *Xeptrb; |
| 333 |
|
|
| 334 |
/* Function local variables */ |
/* Function local variables */ |
| 335 |
|
|
| 336 |
const uschar *Xcallpat; |
USPTR Xcallpat; |
| 337 |
#ifdef SUPPORT_UTF8 |
#ifdef SUPPORT_UTF8 |
| 338 |
const uschar *Xcharptr; |
USPTR Xcharptr; |
| 339 |
#endif |
#endif |
| 340 |
const uschar *Xdata; |
USPTR Xdata; |
| 341 |
const uschar *Xnext; |
USPTR Xnext; |
| 342 |
const uschar *Xpp; |
USPTR Xpp; |
| 343 |
const uschar *Xprev; |
USPTR Xprev; |
| 344 |
const uschar *Xsaved_eptr; |
USPTR Xsaved_eptr; |
| 345 |
|
|
| 346 |
recursion_info Xnew_recursive; |
recursion_info Xnew_recursive; |
| 347 |
|
|
| 428 |
*/ |
*/ |
| 429 |
|
|
| 430 |
static int |
static int |
| 431 |
match(REGISTER USPTR eptr, REGISTER const uschar *ecode, const uschar *mstart, |
match(REGISTER USPTR eptr, REGISTER const uschar *ecode, USPTR mstart, |
| 432 |
int offset_top, match_data *md, unsigned long int ims, eptrblock *eptrb, |
int offset_top, match_data *md, unsigned long int ims, eptrblock *eptrb, |
| 433 |
int flags, unsigned int rdepth) |
int flags, unsigned int rdepth) |
| 434 |
{ |
{ |
| 1461 |
{ |
{ |
| 1462 |
if (eptr == md->start_subject) prev_is_word = FALSE; else |
if (eptr == md->start_subject) prev_is_word = FALSE; else |
| 1463 |
{ |
{ |
| 1464 |
const uschar *lastptr = eptr - 1; |
USPTR lastptr = eptr - 1; |
| 1465 |
while((*lastptr & 0xc0) == 0x80) lastptr--; |
while((*lastptr & 0xc0) == 0x80) lastptr--; |
| 1466 |
GETCHAR(c, lastptr); |
GETCHAR(c, lastptr); |
| 1467 |
prev_is_word = c < 256 && (md->ctypes[c] & ctype_word) != 0; |
prev_is_word = c < 256 && (md->ctypes[c] & ctype_word) != 0; |
| 4619 |
#ifdef SUPPORT_UTF8 |
#ifdef SUPPORT_UTF8 |
| 4620 |
if (utf8 && (options & PCRE_NO_UTF8_CHECK) == 0) |
if (utf8 && (options & PCRE_NO_UTF8_CHECK) == 0) |
| 4621 |
{ |
{ |
| 4622 |
if (_pcre_valid_utf8((uschar *)subject, length) >= 0) |
if (_pcre_valid_utf8((USPTR)subject, length) >= 0) |
| 4623 |
return PCRE_ERROR_BADUTF8; |
return PCRE_ERROR_BADUTF8; |
| 4624 |
if (start_offset > 0 && start_offset < length) |
if (start_offset > 0 && start_offset < length) |
| 4625 |
{ |
{ |
| 4626 |
int tb = ((uschar *)subject)[start_offset]; |
int tb = ((USPTR)subject)[start_offset]; |
| 4627 |
if (tb > 127) |
if (tb > 127) |
| 4628 |
{ |
{ |
| 4629 |
tb &= 0xc0; |
tb &= 0xc0; |