410 |
"this version of PCRE is not compiled with PCRE_UCP support\0" |
"this version of PCRE is not compiled with PCRE_UCP support\0" |
411 |
"\\c must be followed by an ASCII character\0" |
"\\c must be followed by an ASCII character\0" |
412 |
"\\k is not followed by a braced, angle-bracketed, or quoted name\0" |
"\\k is not followed by a braced, angle-bracketed, or quoted name\0" |
413 |
|
/* 70 */ |
414 |
|
"internal error: unknown opcode in find_fixedlength()\0" |
415 |
; |
; |
416 |
|
|
417 |
/* Table to identify digits and hex digits. This is used when compiling |
/* Table to identify digits and hex digits. This is used when compiling |
1530 |
or -1 if there is no fixed length, |
or -1 if there is no fixed length, |
1531 |
or -2 if \C was encountered |
or -2 if \C was encountered |
1532 |
or -3 if an OP_RECURSE item was encountered and atend is FALSE |
or -3 if an OP_RECURSE item was encountered and atend is FALSE |
1533 |
|
or -4 if an unknown opcode was encountered (internal error) |
1534 |
*/ |
*/ |
1535 |
|
|
1536 |
static int |
static int |
1554 |
/* We only need to continue for OP_CBRA (normal capturing bracket) and |
/* We only need to continue for OP_CBRA (normal capturing bracket) and |
1555 |
OP_BRA (normal non-capturing bracket) because the other variants of these |
OP_BRA (normal non-capturing bracket) because the other variants of these |
1556 |
opcodes are all concerned with unlimited repeated groups, which of course |
opcodes are all concerned with unlimited repeated groups, which of course |
1557 |
are not of fixed length. They will cause a -1 response from the default |
are not of fixed length. */ |
|
case of this switch. */ |
|
1558 |
|
|
1559 |
case OP_CBRA: |
case OP_CBRA: |
1560 |
case OP_BRA: |
case OP_BRA: |
1568 |
cc += 1 + LINK_SIZE; |
cc += 1 + LINK_SIZE; |
1569 |
break; |
break; |
1570 |
|
|
1571 |
/* Reached end of a branch; if it's a ket it is the end of a nested |
/* Reached end of a branch; if it's a ket it is the end of a nested call. |
1572 |
call. If it's ALT it is an alternation in a nested call. If it is |
If it's ALT it is an alternation in a nested call. An ACCEPT is effectively |
1573 |
END it's the end of the outer call. All can be handled by the same code. |
an ALT. If it is END it's the end of the outer call. All can be handled by |
1574 |
Note that we must not include the OP_KETRxxx opcodes here, because they |
the same code. Note that we must not include the OP_KETRxxx opcodes here, |
1575 |
all imply an unlimited repeat. */ |
because they all imply an unlimited repeat. */ |
1576 |
|
|
1577 |
case OP_ALT: |
case OP_ALT: |
1578 |
case OP_KET: |
case OP_KET: |
1579 |
case OP_END: |
case OP_END: |
1580 |
|
case OP_ACCEPT: |
1581 |
|
case OP_ASSERT_ACCEPT: |
1582 |
if (length < 0) length = branchlength; |
if (length < 0) length = branchlength; |
1583 |
else if (length != branchlength) return -1; |
else if (length != branchlength) return -1; |
1584 |
if (*cc != OP_ALT) return length; |
if (*cc != OP_ALT) return length; |
1612 |
|
|
1613 |
/* Skip over things that don't match chars */ |
/* Skip over things that don't match chars */ |
1614 |
|
|
1615 |
case OP_REVERSE: |
case OP_MARK: |
1616 |
case OP_CREF: |
case OP_PRUNE_ARG: |
1617 |
case OP_NCREF: |
case OP_SKIP_ARG: |
1618 |
case OP_RREF: |
case OP_THEN_ARG: |
1619 |
case OP_NRREF: |
cc += cc[1] + _pcre_OP_lengths[*cc]; |
1620 |
case OP_DEF: |
break; |
1621 |
|
|
1622 |
case OP_CALLOUT: |
case OP_CALLOUT: |
|
case OP_SOD: |
|
|
case OP_SOM: |
|
|
case OP_SET_SOM: |
|
|
case OP_EOD: |
|
|
case OP_EODN: |
|
1623 |
case OP_CIRC: |
case OP_CIRC: |
1624 |
case OP_CIRCM: |
case OP_CIRCM: |
1625 |
|
case OP_CLOSE: |
1626 |
|
case OP_COMMIT: |
1627 |
|
case OP_CREF: |
1628 |
|
case OP_DEF: |
1629 |
case OP_DOLL: |
case OP_DOLL: |
1630 |
case OP_DOLLM: |
case OP_DOLLM: |
1631 |
|
case OP_EOD: |
1632 |
|
case OP_EODN: |
1633 |
|
case OP_FAIL: |
1634 |
|
case OP_NCREF: |
1635 |
|
case OP_NRREF: |
1636 |
case OP_NOT_WORD_BOUNDARY: |
case OP_NOT_WORD_BOUNDARY: |
1637 |
|
case OP_PRUNE: |
1638 |
|
case OP_REVERSE: |
1639 |
|
case OP_RREF: |
1640 |
|
case OP_SET_SOM: |
1641 |
|
case OP_SKIP: |
1642 |
|
case OP_SOD: |
1643 |
|
case OP_SOM: |
1644 |
|
case OP_THEN: |
1645 |
case OP_WORD_BOUNDARY: |
case OP_WORD_BOUNDARY: |
1646 |
cc += _pcre_OP_lengths[*cc]; |
cc += _pcre_OP_lengths[*cc]; |
1647 |
break; |
break; |
1663 |
need to skip over a multibyte character in UTF8 mode. */ |
need to skip over a multibyte character in UTF8 mode. */ |
1664 |
|
|
1665 |
case OP_EXACT: |
case OP_EXACT: |
1666 |
case OP_EXACTI: |
case OP_EXACTI: |
1667 |
|
case OP_NOTEXACT: |
1668 |
|
case OP_NOTEXACTI: |
1669 |
branchlength += GET2(cc,1); |
branchlength += GET2(cc,1); |
1670 |
cc += 4; |
cc += 4; |
1671 |
#ifdef SUPPORT_UTF8 |
#ifdef SUPPORT_UTF8 |
1686 |
cc += 2; |
cc += 2; |
1687 |
/* Fall through */ |
/* Fall through */ |
1688 |
|
|
1689 |
|
case OP_HSPACE: |
1690 |
|
case OP_VSPACE: |
1691 |
|
case OP_NOT_HSPACE: |
1692 |
|
case OP_NOT_VSPACE: |
1693 |
case OP_NOT_DIGIT: |
case OP_NOT_DIGIT: |
1694 |
case OP_DIGIT: |
case OP_DIGIT: |
1695 |
case OP_NOT_WHITESPACE: |
case OP_NOT_WHITESPACE: |
1721 |
|
|
1722 |
switch (*cc) |
switch (*cc) |
1723 |
{ |
{ |
1724 |
|
case OP_CRPLUS: |
1725 |
|
case OP_CRMINPLUS: |
1726 |
case OP_CRSTAR: |
case OP_CRSTAR: |
1727 |
case OP_CRMINSTAR: |
case OP_CRMINSTAR: |
1728 |
case OP_CRQUERY: |
case OP_CRQUERY: |
1743 |
|
|
1744 |
/* Anything else is variable length */ |
/* Anything else is variable length */ |
1745 |
|
|
1746 |
default: |
case OP_ANYNL: |
1747 |
|
case OP_BRAMINZERO: |
1748 |
|
case OP_BRAPOS: |
1749 |
|
case OP_BRAPOSZERO: |
1750 |
|
case OP_BRAZERO: |
1751 |
|
case OP_CBRAPOS: |
1752 |
|
case OP_EXTUNI: |
1753 |
|
case OP_KETRMAX: |
1754 |
|
case OP_KETRMIN: |
1755 |
|
case OP_KETRPOS: |
1756 |
|
case OP_MINPLUS: |
1757 |
|
case OP_MINPLUSI: |
1758 |
|
case OP_MINQUERY: |
1759 |
|
case OP_MINQUERYI: |
1760 |
|
case OP_MINSTAR: |
1761 |
|
case OP_MINSTARI: |
1762 |
|
case OP_MINUPTO: |
1763 |
|
case OP_MINUPTOI: |
1764 |
|
case OP_NOTMINPLUS: |
1765 |
|
case OP_NOTMINPLUSI: |
1766 |
|
case OP_NOTMINQUERY: |
1767 |
|
case OP_NOTMINQUERYI: |
1768 |
|
case OP_NOTMINSTAR: |
1769 |
|
case OP_NOTMINSTARI: |
1770 |
|
case OP_NOTMINUPTO: |
1771 |
|
case OP_NOTMINUPTOI: |
1772 |
|
case OP_NOTPLUS: |
1773 |
|
case OP_NOTPLUSI: |
1774 |
|
case OP_NOTPOSPLUS: |
1775 |
|
case OP_NOTPOSPLUSI: |
1776 |
|
case OP_NOTPOSQUERY: |
1777 |
|
case OP_NOTPOSQUERYI: |
1778 |
|
case OP_NOTPOSSTAR: |
1779 |
|
case OP_NOTPOSSTARI: |
1780 |
|
case OP_NOTPOSUPTO: |
1781 |
|
case OP_NOTPOSUPTOI: |
1782 |
|
case OP_NOTQUERY: |
1783 |
|
case OP_NOTQUERYI: |
1784 |
|
case OP_NOTSTAR: |
1785 |
|
case OP_NOTSTARI: |
1786 |
|
case OP_NOTUPTO: |
1787 |
|
case OP_NOTUPTOI: |
1788 |
|
case OP_PLUS: |
1789 |
|
case OP_PLUSI: |
1790 |
|
case OP_POSPLUS: |
1791 |
|
case OP_POSPLUSI: |
1792 |
|
case OP_POSQUERY: |
1793 |
|
case OP_POSQUERYI: |
1794 |
|
case OP_POSSTAR: |
1795 |
|
case OP_POSSTARI: |
1796 |
|
case OP_POSUPTO: |
1797 |
|
case OP_POSUPTOI: |
1798 |
|
case OP_QUERY: |
1799 |
|
case OP_QUERYI: |
1800 |
|
case OP_REF: |
1801 |
|
case OP_REFI: |
1802 |
|
case OP_SBRA: |
1803 |
|
case OP_SBRAPOS: |
1804 |
|
case OP_SCBRA: |
1805 |
|
case OP_SCBRAPOS: |
1806 |
|
case OP_SCOND: |
1807 |
|
case OP_SKIPZERO: |
1808 |
|
case OP_STAR: |
1809 |
|
case OP_STARI: |
1810 |
|
case OP_TYPEMINPLUS: |
1811 |
|
case OP_TYPEMINQUERY: |
1812 |
|
case OP_TYPEMINSTAR: |
1813 |
|
case OP_TYPEMINUPTO: |
1814 |
|
case OP_TYPEPLUS: |
1815 |
|
case OP_TYPEPOSPLUS: |
1816 |
|
case OP_TYPEPOSQUERY: |
1817 |
|
case OP_TYPEPOSSTAR: |
1818 |
|
case OP_TYPEPOSUPTO: |
1819 |
|
case OP_TYPEQUERY: |
1820 |
|
case OP_TYPESTAR: |
1821 |
|
case OP_TYPEUPTO: |
1822 |
|
case OP_UPTO: |
1823 |
|
case OP_UPTOI: |
1824 |
return -1; |
return -1; |
1825 |
|
|
1826 |
|
/* Catch unrecognized opcodes so that when new ones are added they |
1827 |
|
are not forgotten, as has happened in the past. */ |
1828 |
|
|
1829 |
|
default: |
1830 |
|
return -4; |
1831 |
} |
} |
1832 |
} |
} |
1833 |
/* Control never gets here */ |
/* Control never gets here */ |
6723 |
} |
} |
6724 |
else if (fixed_length < 0) |
else if (fixed_length < 0) |
6725 |
{ |
{ |
6726 |
*errorcodeptr = (fixed_length == -2)? ERR36 : ERR25; |
*errorcodeptr = (fixed_length == -2)? ERR36 : |
6727 |
|
(fixed_length == -4)? ERR70: ERR25; |
6728 |
*ptrptr = ptr; |
*ptrptr = ptr; |
6729 |
return FALSE; |
return FALSE; |
6730 |
} |
} |
7523 |
DPRINTF(("fixed length = %d\n", fixed_length)); |
DPRINTF(("fixed length = %d\n", fixed_length)); |
7524 |
if (fixed_length < 0) |
if (fixed_length < 0) |
7525 |
{ |
{ |
7526 |
errorcode = (fixed_length == -2)? ERR36 : ERR25; |
errorcode = (fixed_length == -2)? ERR36 : |
7527 |
|
(fixed_length == -4)? ERR70 : ERR25; |
7528 |
break; |
break; |
7529 |
} |
} |
7530 |
PUT(cc, 1, fixed_length); |
PUT(cc, 1, fixed_length); |