403 |
/* These macros pack up tests that are used for partial matching, and which |
/* These macros pack up tests that are used for partial matching, and which |
404 |
appears several times in the code. We set the "hit end" flag if the pointer is |
appears several times in the code. We set the "hit end" flag if the pointer is |
405 |
at the end of the subject and also past the start of the subject (i.e. |
at the end of the subject and also past the start of the subject (i.e. |
406 |
something has been matched). The second one is used when we already know we are |
something has been matched). For hard partial matching, we then return |
407 |
past the end of the subject. */ |
immediately. The second one is used when we already know we are past the end of |
408 |
|
the subject. */ |
409 |
|
|
410 |
#define CHECK_PARTIAL()\ |
#define CHECK_PARTIAL()\ |
411 |
if (md->partial && eptr >= md->end_subject && eptr > mstart)\ |
if (md->partial && eptr >= md->end_subject && eptr > mstart)\ |
412 |
md->hitend = TRUE |
{\ |
413 |
|
md->hitend = TRUE;\ |
414 |
|
if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);\ |
415 |
|
} |
416 |
|
|
417 |
#define SCHECK_PARTIAL()\ |
#define SCHECK_PARTIAL()\ |
418 |
if (md->partial && eptr > mstart) md->hitend = TRUE |
if (md->partial && eptr > mstart)\ |
419 |
|
{\ |
420 |
|
md->hitend = TRUE;\ |
421 |
|
md->hitend = TRUE;\ |
422 |
|
if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);\ |
423 |
|
} |
424 |
|
|
425 |
|
|
426 |
/* Performance note: It might be tempting to extract commonly used fields from |
/* Performance note: It might be tempting to extract commonly used fields from |
427 |
the md structure (e.g. utf8, end_subject) into individual variables to improve |
the md structure (e.g. utf8, end_subject) into individual variables to improve |
1878 |
|
|
1879 |
for (i = 1; i <= min; i++) |
for (i = 1; i <= min; i++) |
1880 |
{ |
{ |
1881 |
if (!match_ref(offset, eptr, length, md, ims)) |
if (!match_ref(offset, eptr, length, md, ims)) |
1882 |
{ |
{ |
1883 |
CHECK_PARTIAL(); |
CHECK_PARTIAL(); |
1884 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
1885 |
} |
} |
1886 |
eptr += length; |
eptr += length; |
1887 |
} |
} |
1888 |
|
|
1901 |
if (rrc != MATCH_NOMATCH) RRETURN(rrc); |
if (rrc != MATCH_NOMATCH) RRETURN(rrc); |
1902 |
if (fi >= max || !match_ref(offset, eptr, length, md, ims)) |
if (fi >= max || !match_ref(offset, eptr, length, md, ims)) |
1903 |
{ |
{ |
1904 |
CHECK_PARTIAL(); |
CHECK_PARTIAL(); |
1905 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
1906 |
} |
} |
1907 |
eptr += length; |
eptr += length; |
1908 |
} |
} |
1909 |
/* Control never gets here */ |
/* Control never gets here */ |
1919 |
if (!match_ref(offset, eptr, length, md, ims)) break; |
if (!match_ref(offset, eptr, length, md, ims)) break; |
1920 |
eptr += length; |
eptr += length; |
1921 |
} |
} |
1922 |
CHECK_PARTIAL(); |
CHECK_PARTIAL(); |
1923 |
while (eptr >= pp) |
while (eptr >= pp) |
1924 |
{ |
{ |
1925 |
RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM15); |
RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM15); |
1987 |
{ |
{ |
1988 |
for (i = 1; i <= min; i++) |
for (i = 1; i <= min; i++) |
1989 |
{ |
{ |
1990 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
1991 |
{ |
{ |
1992 |
CHECK_PARTIAL(); |
CHECK_PARTIAL(); |
1993 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
1994 |
} |
} |
1995 |
GETCHARINC(c, eptr); |
GETCHARINC(c, eptr); |
1996 |
if (c > 255) |
if (c > 255) |
1997 |
{ |
{ |
2009 |
{ |
{ |
2010 |
for (i = 1; i <= min; i++) |
for (i = 1; i <= min; i++) |
2011 |
{ |
{ |
2012 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
2013 |
{ |
{ |
2014 |
CHECK_PARTIAL(); |
CHECK_PARTIAL(); |
2015 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
2016 |
} |
} |
2017 |
c = *eptr++; |
c = *eptr++; |
2018 |
if ((data[c/8] & (1 << (c&7))) == 0) RRETURN(MATCH_NOMATCH); |
if ((data[c/8] & (1 << (c&7))) == 0) RRETURN(MATCH_NOMATCH); |
2019 |
} |
} |
2037 |
{ |
{ |
2038 |
RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM16); |
RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM16); |
2039 |
if (rrc != MATCH_NOMATCH) RRETURN(rrc); |
if (rrc != MATCH_NOMATCH) RRETURN(rrc); |
2040 |
if (fi >= max) |
if (fi >= max) |
2041 |
{ |
{ |
2042 |
CHECK_PARTIAL(); |
CHECK_PARTIAL(); |
2043 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
2044 |
} |
} |
2045 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
2046 |
{ |
{ |
2047 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
2048 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
2049 |
} |
} |
2050 |
GETCHARINC(c, eptr); |
GETCHARINC(c, eptr); |
2051 |
if (c > 255) |
if (c > 255) |
2052 |
{ |
{ |
2066 |
{ |
{ |
2067 |
RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM17); |
RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM17); |
2068 |
if (rrc != MATCH_NOMATCH) RRETURN(rrc); |
if (rrc != MATCH_NOMATCH) RRETURN(rrc); |
2069 |
if (fi >= max) |
if (fi >= max) |
2070 |
{ |
{ |
2071 |
CHECK_PARTIAL(); |
CHECK_PARTIAL(); |
2072 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
2073 |
} |
} |
2074 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
2075 |
{ |
{ |
2076 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
2077 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
2078 |
} |
} |
2079 |
c = *eptr++; |
c = *eptr++; |
2080 |
if ((data[c/8] & (1 << (c&7))) == 0) RRETURN(MATCH_NOMATCH); |
if ((data[c/8] & (1 << (c&7))) == 0) RRETURN(MATCH_NOMATCH); |
2081 |
} |
} |
2108 |
} |
} |
2109 |
eptr += len; |
eptr += len; |
2110 |
} |
} |
2111 |
CHECK_PARTIAL(); |
CHECK_PARTIAL(); |
2112 |
for (;;) |
for (;;) |
2113 |
{ |
{ |
2114 |
RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM18); |
RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM18); |
2128 |
if ((data[c/8] & (1 << (c&7))) == 0) break; |
if ((data[c/8] & (1 << (c&7))) == 0) break; |
2129 |
eptr++; |
eptr++; |
2130 |
} |
} |
2131 |
CHECK_PARTIAL(); |
CHECK_PARTIAL(); |
2132 |
while (eptr >= pp) |
while (eptr >= pp) |
2133 |
{ |
{ |
2134 |
RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM19); |
RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM19); |
2186 |
|
|
2187 |
for (i = 1; i <= min; i++) |
for (i = 1; i <= min; i++) |
2188 |
{ |
{ |
2189 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
2190 |
{ |
{ |
2191 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
2192 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
2193 |
} |
} |
2194 |
GETCHARINCTEST(c, eptr); |
GETCHARINCTEST(c, eptr); |
2195 |
if (!_pcre_xclass(c, data)) RRETURN(MATCH_NOMATCH); |
if (!_pcre_xclass(c, data)) RRETURN(MATCH_NOMATCH); |
2196 |
} |
} |
2209 |
{ |
{ |
2210 |
RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM20); |
RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM20); |
2211 |
if (rrc != MATCH_NOMATCH) RRETURN(rrc); |
if (rrc != MATCH_NOMATCH) RRETURN(rrc); |
2212 |
if (fi >= max) |
if (fi >= max) |
2213 |
{ |
{ |
2214 |
CHECK_PARTIAL(); |
CHECK_PARTIAL(); |
2215 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
2216 |
} |
} |
2217 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
2218 |
{ |
{ |
2219 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
2220 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
2221 |
} |
} |
2222 |
GETCHARINCTEST(c, eptr); |
GETCHARINCTEST(c, eptr); |
2223 |
if (!_pcre_xclass(c, data)) RRETURN(MATCH_NOMATCH); |
if (!_pcre_xclass(c, data)) RRETURN(MATCH_NOMATCH); |
2224 |
} |
} |
2238 |
if (!_pcre_xclass(c, data)) break; |
if (!_pcre_xclass(c, data)) break; |
2239 |
eptr += len; |
eptr += len; |
2240 |
} |
} |
2241 |
CHECK_PARTIAL(); |
CHECK_PARTIAL(); |
2242 |
for(;;) |
for(;;) |
2243 |
{ |
{ |
2244 |
RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM21); |
RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM21); |
2465 |
|
|
2466 |
CHECK_PARTIAL(); |
CHECK_PARTIAL(); |
2467 |
if (possessive) continue; |
if (possessive) continue; |
2468 |
|
|
2469 |
for(;;) |
for(;;) |
2470 |
{ |
{ |
2471 |
RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM23); |
RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM23); |
2526 |
if (rrc != MATCH_NOMATCH) RRETURN(rrc); |
if (rrc != MATCH_NOMATCH) RRETURN(rrc); |
2527 |
if (fi >= max) |
if (fi >= max) |
2528 |
{ |
{ |
2529 |
CHECK_PARTIAL(); |
CHECK_PARTIAL(); |
2530 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
2531 |
} |
} |
2532 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
2533 |
{ |
{ |
2534 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
2535 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
2536 |
} |
} |
2537 |
if (fc != md->lcc[*eptr++]) RRETURN(MATCH_NOMATCH); |
if (fc != md->lcc[*eptr++]) RRETURN(MATCH_NOMATCH); |
2546 |
if (eptr >= md->end_subject || fc != md->lcc[*eptr]) break; |
if (eptr >= md->end_subject || fc != md->lcc[*eptr]) break; |
2547 |
eptr++; |
eptr++; |
2548 |
} |
} |
2549 |
|
|
2550 |
CHECK_PARTIAL(); |
CHECK_PARTIAL(); |
2551 |
if (possessive) continue; |
if (possessive) continue; |
2552 |
|
|
2553 |
while (eptr >= pp) |
while (eptr >= pp) |
2554 |
{ |
{ |
2555 |
RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM25); |
RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM25); |
2565 |
|
|
2566 |
else |
else |
2567 |
{ |
{ |
2568 |
for (i = 1; i <= min; i++) |
for (i = 1; i <= min; i++) |
2569 |
{ |
{ |
2570 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
2571 |
{ |
{ |
2573 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
2574 |
} |
} |
2575 |
if (fc != *eptr++) RRETURN(MATCH_NOMATCH); |
if (fc != *eptr++) RRETURN(MATCH_NOMATCH); |
2576 |
} |
} |
2577 |
if (min == max) continue; |
if (min == max) continue; |
2578 |
if (minimize) |
if (minimize) |
2579 |
{ |
{ |
2587 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
2588 |
} |
} |
2589 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
2590 |
{ |
{ |
2591 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
2592 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
2593 |
} |
} |
2594 |
if (fc != *eptr++) RRETURN(MATCH_NOMATCH); |
if (fc != *eptr++) RRETURN(MATCH_NOMATCH); |
2595 |
} |
} |
2596 |
/* Control never gets here */ |
/* Control never gets here */ |
2603 |
if (eptr >= md->end_subject || fc != *eptr) break; |
if (eptr >= md->end_subject || fc != *eptr) break; |
2604 |
eptr++; |
eptr++; |
2605 |
} |
} |
2606 |
CHECK_PARTIAL(); |
CHECK_PARTIAL(); |
2607 |
if (possessive) continue; |
if (possessive) continue; |
2608 |
while (eptr >= pp) |
while (eptr >= pp) |
2609 |
{ |
{ |
2727 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
2728 |
{ |
{ |
2729 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
2730 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
2731 |
} |
} |
2732 |
GETCHARINC(d, eptr); |
GETCHARINC(d, eptr); |
2733 |
if (d < 256) d = md->lcc[d]; |
if (d < 256) d = md->lcc[d]; |
2734 |
if (fc == d) RRETURN(MATCH_NOMATCH); |
if (fc == d) RRETURN(MATCH_NOMATCH); |
2744 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
2745 |
{ |
{ |
2746 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
2747 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
2748 |
} |
} |
2749 |
if (fc == md->lcc[*eptr++]) RRETURN(MATCH_NOMATCH); |
if (fc == md->lcc[*eptr++]) RRETURN(MATCH_NOMATCH); |
2750 |
} |
} |
2751 |
} |
} |
2752 |
|
|
2753 |
if (min == max) continue; |
if (min == max) continue; |
2767 |
{ |
{ |
2768 |
CHECK_PARTIAL(); |
CHECK_PARTIAL(); |
2769 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
2770 |
} |
} |
2771 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
2772 |
{ |
{ |
2773 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
2774 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
2775 |
} |
} |
2776 |
GETCHARINC(d, eptr); |
GETCHARINC(d, eptr); |
2777 |
if (d < 256) d = md->lcc[d]; |
if (d < 256) d = md->lcc[d]; |
2778 |
if (fc == d) RRETURN(MATCH_NOMATCH); |
if (fc == d) RRETURN(MATCH_NOMATCH); |
2822 |
if (fc == d) break; |
if (fc == d) break; |
2823 |
eptr += len; |
eptr += len; |
2824 |
} |
} |
2825 |
CHECK_PARTIAL(); |
CHECK_PARTIAL(); |
2826 |
if (possessive) continue; |
if (possessive) continue; |
2827 |
for(;;) |
for(;;) |
2828 |
{ |
{ |
2841 |
if (eptr >= md->end_subject || fc == md->lcc[*eptr]) break; |
if (eptr >= md->end_subject || fc == md->lcc[*eptr]) break; |
2842 |
eptr++; |
eptr++; |
2843 |
} |
} |
2844 |
CHECK_PARTIAL(); |
CHECK_PARTIAL(); |
2845 |
if (possessive) continue; |
if (possessive) continue; |
2846 |
while (eptr >= pp) |
while (eptr >= pp) |
2847 |
{ |
{ |
2870 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
2871 |
{ |
{ |
2872 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
2873 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
2874 |
} |
} |
2875 |
GETCHARINC(d, eptr); |
GETCHARINC(d, eptr); |
2876 |
if (fc == d) RRETURN(MATCH_NOMATCH); |
if (fc == d) RRETURN(MATCH_NOMATCH); |
2877 |
} |
} |
2885 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
2886 |
{ |
{ |
2887 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
2888 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
2889 |
} |
} |
2890 |
if (fc == *eptr++) RRETURN(MATCH_NOMATCH); |
if (fc == *eptr++) RRETURN(MATCH_NOMATCH); |
2891 |
} |
} |
2892 |
} |
} |
2893 |
|
|
2894 |
if (min == max) continue; |
if (min == max) continue; |
2904 |
{ |
{ |
2905 |
RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM32); |
RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM32); |
2906 |
if (rrc != MATCH_NOMATCH) RRETURN(rrc); |
if (rrc != MATCH_NOMATCH) RRETURN(rrc); |
2907 |
if (fi >= max) |
if (fi >= max) |
2908 |
{ |
{ |
2909 |
CHECK_PARTIAL(); |
CHECK_PARTIAL(); |
2910 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
2911 |
} |
} |
2912 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
2913 |
{ |
{ |
2914 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
2915 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
2916 |
} |
} |
2917 |
GETCHARINC(d, eptr); |
GETCHARINC(d, eptr); |
2918 |
if (fc == d) RRETURN(MATCH_NOMATCH); |
if (fc == d) RRETURN(MATCH_NOMATCH); |
2919 |
} |
} |
2935 |
{ |
{ |
2936 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
2937 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
2938 |
} |
} |
2939 |
if (fc == *eptr++) RRETURN(MATCH_NOMATCH); |
if (fc == *eptr++) RRETURN(MATCH_NOMATCH); |
2940 |
} |
} |
2941 |
} |
} |
2961 |
if (fc == d) break; |
if (fc == d) break; |
2962 |
eptr += len; |
eptr += len; |
2963 |
} |
} |
2964 |
CHECK_PARTIAL(); |
CHECK_PARTIAL(); |
2965 |
if (possessive) continue; |
if (possessive) continue; |
2966 |
for(;;) |
for(;;) |
2967 |
{ |
{ |
2980 |
if (eptr >= md->end_subject || fc == *eptr) break; |
if (eptr >= md->end_subject || fc == *eptr) break; |
2981 |
eptr++; |
eptr++; |
2982 |
} |
} |
2983 |
CHECK_PARTIAL(); |
CHECK_PARTIAL(); |
2984 |
if (possessive) continue; |
if (possessive) continue; |
2985 |
while (eptr >= pp) |
while (eptr >= pp) |
2986 |
{ |
{ |
3087 |
if (prop_fail_result) RRETURN(MATCH_NOMATCH); |
if (prop_fail_result) RRETURN(MATCH_NOMATCH); |
3088 |
for (i = 1; i <= min; i++) |
for (i = 1; i <= min; i++) |
3089 |
{ |
{ |
3090 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
3091 |
{ |
{ |
3092 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
3093 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3094 |
} |
} |
3095 |
GETCHARINCTEST(c, eptr); |
GETCHARINCTEST(c, eptr); |
3096 |
} |
} |
3097 |
break; |
break; |
3099 |
case PT_LAMP: |
case PT_LAMP: |
3100 |
for (i = 1; i <= min; i++) |
for (i = 1; i <= min; i++) |
3101 |
{ |
{ |
3102 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
3103 |
{ |
{ |
3104 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
3105 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3106 |
} |
} |
3107 |
GETCHARINCTEST(c, eptr); |
GETCHARINCTEST(c, eptr); |
3108 |
prop_chartype = UCD_CHARTYPE(c); |
prop_chartype = UCD_CHARTYPE(c); |
3109 |
if ((prop_chartype == ucp_Lu || |
if ((prop_chartype == ucp_Lu || |
3116 |
case PT_GC: |
case PT_GC: |
3117 |
for (i = 1; i <= min; i++) |
for (i = 1; i <= min; i++) |
3118 |
{ |
{ |
3119 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
3120 |
{ |
{ |
3121 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
3122 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3123 |
} |
} |
3124 |
GETCHARINCTEST(c, eptr); |
GETCHARINCTEST(c, eptr); |
3125 |
prop_category = UCD_CATEGORY(c); |
prop_category = UCD_CATEGORY(c); |
3126 |
if ((prop_category == prop_value) == prop_fail_result) |
if ((prop_category == prop_value) == prop_fail_result) |
3131 |
case PT_PC: |
case PT_PC: |
3132 |
for (i = 1; i <= min; i++) |
for (i = 1; i <= min; i++) |
3133 |
{ |
{ |
3134 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
3135 |
{ |
{ |
3136 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
3137 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3138 |
} |
} |
3139 |
GETCHARINCTEST(c, eptr); |
GETCHARINCTEST(c, eptr); |
3140 |
prop_chartype = UCD_CHARTYPE(c); |
prop_chartype = UCD_CHARTYPE(c); |
3141 |
if ((prop_chartype == prop_value) == prop_fail_result) |
if ((prop_chartype == prop_value) == prop_fail_result) |
3146 |
case PT_SC: |
case PT_SC: |
3147 |
for (i = 1; i <= min; i++) |
for (i = 1; i <= min; i++) |
3148 |
{ |
{ |
3149 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
3150 |
{ |
{ |
3151 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
3152 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3153 |
} |
} |
3154 |
GETCHARINCTEST(c, eptr); |
GETCHARINCTEST(c, eptr); |
3155 |
prop_script = UCD_SCRIPT(c); |
prop_script = UCD_SCRIPT(c); |
3156 |
if ((prop_script == prop_value) == prop_fail_result) |
if ((prop_script == prop_value) == prop_fail_result) |
3170 |
{ |
{ |
3171 |
for (i = 1; i <= min; i++) |
for (i = 1; i <= min; i++) |
3172 |
{ |
{ |
3173 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
3174 |
{ |
{ |
3175 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
3176 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3177 |
} |
} |
3178 |
GETCHARINCTEST(c, eptr); |
GETCHARINCTEST(c, eptr); |
3179 |
prop_category = UCD_CATEGORY(c); |
prop_category = UCD_CATEGORY(c); |
3180 |
if (prop_category == ucp_M) RRETURN(MATCH_NOMATCH); |
if (prop_category == ucp_M) RRETURN(MATCH_NOMATCH); |
3203 |
{ |
{ |
3204 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
3205 |
{ |
{ |
3206 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
3207 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3208 |
} |
} |
3209 |
if (IS_NEWLINE(eptr)) RRETURN(MATCH_NOMATCH); |
if (IS_NEWLINE(eptr)) RRETURN(MATCH_NOMATCH); |
3210 |
eptr++; |
eptr++; |
3211 |
while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++; |
while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++; |
3215 |
case OP_ALLANY: |
case OP_ALLANY: |
3216 |
for (i = 1; i <= min; i++) |
for (i = 1; i <= min; i++) |
3217 |
{ |
{ |
3218 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
3219 |
{ |
{ |
3220 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
3221 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3222 |
} |
} |
3223 |
eptr++; |
eptr++; |
3224 |
while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++; |
while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++; |
3225 |
} |
} |
3226 |
break; |
break; |
3227 |
|
|
3228 |
case OP_ANYBYTE: |
case OP_ANYBYTE: |
3229 |
if (eptr > md->end_subject - min) RRETURN(MATCH_NOMATCH); |
if (eptr > md->end_subject - min) RRETURN(MATCH_NOMATCH); |
3230 |
eptr += min; |
eptr += min; |
3231 |
break; |
break; |
3232 |
|
|
3233 |
case OP_ANYNL: |
case OP_ANYNL: |
3234 |
for (i = 1; i <= min; i++) |
for (i = 1; i <= min; i++) |
3235 |
{ |
{ |
3236 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
3237 |
{ |
{ |
3238 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
3239 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3240 |
} |
} |
3241 |
GETCHARINC(c, eptr); |
GETCHARINC(c, eptr); |
3242 |
switch(c) |
switch(c) |
3243 |
{ |
{ |
3263 |
case OP_NOT_HSPACE: |
case OP_NOT_HSPACE: |
3264 |
for (i = 1; i <= min; i++) |
for (i = 1; i <= min; i++) |
3265 |
{ |
{ |
3266 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
3267 |
{ |
{ |
3268 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
3269 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3270 |
} |
} |
3271 |
GETCHARINC(c, eptr); |
GETCHARINC(c, eptr); |
3272 |
switch(c) |
switch(c) |
3273 |
{ |
{ |
3299 |
case OP_HSPACE: |
case OP_HSPACE: |
3300 |
for (i = 1; i <= min; i++) |
for (i = 1; i <= min; i++) |
3301 |
{ |
{ |
3302 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
3303 |
{ |
{ |
3304 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
3305 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3306 |
} |
} |
3307 |
GETCHARINC(c, eptr); |
GETCHARINC(c, eptr); |
3308 |
switch(c) |
switch(c) |
3309 |
{ |
{ |
3335 |
case OP_NOT_VSPACE: |
case OP_NOT_VSPACE: |
3336 |
for (i = 1; i <= min; i++) |
for (i = 1; i <= min; i++) |
3337 |
{ |
{ |
3338 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
3339 |
{ |
{ |
3340 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
3341 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3342 |
} |
} |
3343 |
GETCHARINC(c, eptr); |
GETCHARINC(c, eptr); |
3344 |
switch(c) |
switch(c) |
3345 |
{ |
{ |
3359 |
case OP_VSPACE: |
case OP_VSPACE: |
3360 |
for (i = 1; i <= min; i++) |
for (i = 1; i <= min; i++) |
3361 |
{ |
{ |
3362 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
3363 |
{ |
{ |
3364 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
3365 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3366 |
} |
} |
3367 |
GETCHARINC(c, eptr); |
GETCHARINC(c, eptr); |
3368 |
switch(c) |
switch(c) |
3369 |
{ |
{ |
3383 |
case OP_NOT_DIGIT: |
case OP_NOT_DIGIT: |
3384 |
for (i = 1; i <= min; i++) |
for (i = 1; i <= min; i++) |
3385 |
{ |
{ |
3386 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
3387 |
{ |
{ |
3388 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
3389 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3390 |
} |
} |
3391 |
GETCHARINC(c, eptr); |
GETCHARINC(c, eptr); |
3392 |
if (c < 128 && (md->ctypes[c] & ctype_digit) != 0) |
if (c < 128 && (md->ctypes[c] & ctype_digit) != 0) |
3393 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3397 |
case OP_DIGIT: |
case OP_DIGIT: |
3398 |
for (i = 1; i <= min; i++) |
for (i = 1; i <= min; i++) |
3399 |
{ |
{ |
3400 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
3401 |
{ |
{ |
3402 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
3403 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3404 |
} |
} |
3405 |
if (*eptr >= 128 || (md->ctypes[*eptr++] & ctype_digit) == 0) |
if (*eptr >= 128 || (md->ctypes[*eptr++] & ctype_digit) == 0) |
3406 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3407 |
/* No need to skip more bytes - we know it's a 1-byte character */ |
/* No need to skip more bytes - we know it's a 1-byte character */ |
3411 |
case OP_NOT_WHITESPACE: |
case OP_NOT_WHITESPACE: |
3412 |
for (i = 1; i <= min; i++) |
for (i = 1; i <= min; i++) |
3413 |
{ |
{ |
3414 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
3415 |
{ |
{ |
3416 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
3417 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3418 |
} |
} |
3419 |
if (*eptr < 128 && (md->ctypes[*eptr] & ctype_space) != 0) |
if (*eptr < 128 && (md->ctypes[*eptr] & ctype_space) != 0) |
3420 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3421 |
while (++eptr < md->end_subject && (*eptr & 0xc0) == 0x80); |
while (++eptr < md->end_subject && (*eptr & 0xc0) == 0x80); |
3425 |
case OP_WHITESPACE: |
case OP_WHITESPACE: |
3426 |
for (i = 1; i <= min; i++) |
for (i = 1; i <= min; i++) |
3427 |
{ |
{ |
3428 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
3429 |
{ |
{ |
3430 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
3431 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3432 |
} |
} |
3433 |
if (*eptr >= 128 || (md->ctypes[*eptr++] & ctype_space) == 0) |
if (*eptr >= 128 || (md->ctypes[*eptr++] & ctype_space) == 0) |
3434 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3435 |
/* No need to skip more bytes - we know it's a 1-byte character */ |
/* No need to skip more bytes - we know it's a 1-byte character */ |
3449 |
case OP_WORDCHAR: |
case OP_WORDCHAR: |
3450 |
for (i = 1; i <= min; i++) |
for (i = 1; i <= min; i++) |
3451 |
{ |
{ |
3452 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
3453 |
{ |
{ |
3454 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
3455 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3456 |
} |
} |
3457 |
if (*eptr >= 128 || (md->ctypes[*eptr++] & ctype_word) == 0) |
if (*eptr >= 128 || (md->ctypes[*eptr++] & ctype_word) == 0) |
3458 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3459 |
/* No need to skip more bytes - we know it's a 1-byte character */ |
/* No need to skip more bytes - we know it's a 1-byte character */ |
3475 |
case OP_ANY: |
case OP_ANY: |
3476 |
for (i = 1; i <= min; i++) |
for (i = 1; i <= min; i++) |
3477 |
{ |
{ |
3478 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
3479 |
{ |
{ |
3480 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
3481 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3482 |
} |
} |
3483 |
if (IS_NEWLINE(eptr)) RRETURN(MATCH_NOMATCH); |
if (IS_NEWLINE(eptr)) RRETURN(MATCH_NOMATCH); |
3484 |
eptr++; |
eptr++; |
3485 |
} |
} |
3486 |
break; |
break; |
3487 |
|
|
3488 |
case OP_ALLANY: |
case OP_ALLANY: |
3489 |
if (eptr > md->end_subject - min) RRETURN(MATCH_NOMATCH); |
if (eptr > md->end_subject - min) RRETURN(MATCH_NOMATCH); |
3490 |
eptr += min; |
eptr += min; |
3491 |
break; |
break; |
3492 |
|
|
3493 |
case OP_ANYBYTE: |
case OP_ANYBYTE: |
3494 |
if (eptr > md->end_subject - min) RRETURN(MATCH_NOMATCH); |
if (eptr > md->end_subject - min) RRETURN(MATCH_NOMATCH); |
3495 |
eptr += min; |
eptr += min; |
3496 |
break; |
break; |
3497 |
|
|
3498 |
case OP_ANYNL: |
case OP_ANYNL: |
3499 |
for (i = 1; i <= min; i++) |
for (i = 1; i <= min; i++) |
3500 |
{ |
{ |
3501 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
3502 |
{ |
{ |
3503 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
3504 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3505 |
} |
} |
3506 |
switch(*eptr++) |
switch(*eptr++) |
3507 |
{ |
{ |
3508 |
default: RRETURN(MATCH_NOMATCH); |
default: RRETURN(MATCH_NOMATCH); |
3524 |
case OP_NOT_HSPACE: |
case OP_NOT_HSPACE: |
3525 |
for (i = 1; i <= min; i++) |
for (i = 1; i <= min; i++) |
3526 |
{ |
{ |
3527 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
3528 |
{ |
{ |
3529 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
3530 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3531 |
} |
} |
3532 |
switch(*eptr++) |
switch(*eptr++) |
3533 |
{ |
{ |
3534 |
default: break; |
default: break; |
3543 |
case OP_HSPACE: |
case OP_HSPACE: |
3544 |
for (i = 1; i <= min; i++) |
for (i = 1; i <= min; i++) |
3545 |
{ |
{ |
3546 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
3547 |
{ |
{ |
3548 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
3549 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3550 |
} |
} |
3551 |
switch(*eptr++) |
switch(*eptr++) |
3552 |
{ |
{ |
3553 |
default: RRETURN(MATCH_NOMATCH); |
default: RRETURN(MATCH_NOMATCH); |
3562 |
case OP_NOT_VSPACE: |
case OP_NOT_VSPACE: |
3563 |
for (i = 1; i <= min; i++) |
for (i = 1; i <= min; i++) |
3564 |
{ |
{ |
3565 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
3566 |
{ |
{ |
3567 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
3568 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3569 |
} |
} |
3570 |
switch(*eptr++) |
switch(*eptr++) |
3571 |
{ |
{ |
3572 |
default: break; |
default: break; |
3583 |
case OP_VSPACE: |
case OP_VSPACE: |
3584 |
for (i = 1; i <= min; i++) |
for (i = 1; i <= min; i++) |
3585 |
{ |
{ |
3586 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
3587 |
{ |
{ |
3588 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
3589 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3590 |
} |
} |
3591 |
switch(*eptr++) |
switch(*eptr++) |
3592 |
{ |
{ |
3593 |
default: RRETURN(MATCH_NOMATCH); |
default: RRETURN(MATCH_NOMATCH); |
3603 |
|
|
3604 |
case OP_NOT_DIGIT: |
case OP_NOT_DIGIT: |
3605 |
for (i = 1; i <= min; i++) |
for (i = 1; i <= min; i++) |
3606 |
{ |
{ |
3607 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
3608 |
{ |
{ |
3609 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
3610 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3611 |
} |
} |
3612 |
if ((md->ctypes[*eptr++] & ctype_digit) != 0) RRETURN(MATCH_NOMATCH); |
if ((md->ctypes[*eptr++] & ctype_digit) != 0) RRETURN(MATCH_NOMATCH); |
3613 |
} |
} |
3614 |
break; |
break; |
3615 |
|
|
3616 |
case OP_DIGIT: |
case OP_DIGIT: |
3617 |
for (i = 1; i <= min; i++) |
for (i = 1; i <= min; i++) |
3618 |
{ |
{ |
3619 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
3620 |
{ |
{ |
3621 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
3622 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3623 |
} |
} |
3624 |
if ((md->ctypes[*eptr++] & ctype_digit) == 0) RRETURN(MATCH_NOMATCH); |
if ((md->ctypes[*eptr++] & ctype_digit) == 0) RRETURN(MATCH_NOMATCH); |
3625 |
} |
} |
3626 |
break; |
break; |
3627 |
|
|
3628 |
case OP_NOT_WHITESPACE: |
case OP_NOT_WHITESPACE: |
3629 |
for (i = 1; i <= min; i++) |
for (i = 1; i <= min; i++) |
3630 |
{ |
{ |
3631 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
3632 |
{ |
{ |
3633 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
3634 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3635 |
} |
} |
3636 |
if ((md->ctypes[*eptr++] & ctype_space) != 0) RRETURN(MATCH_NOMATCH); |
if ((md->ctypes[*eptr++] & ctype_space) != 0) RRETURN(MATCH_NOMATCH); |
3637 |
} |
} |
3638 |
break; |
break; |
3639 |
|
|
3640 |
case OP_WHITESPACE: |
case OP_WHITESPACE: |
3641 |
for (i = 1; i <= min; i++) |
for (i = 1; i <= min; i++) |
3642 |
{ |
{ |
3643 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
3644 |
{ |
{ |
3645 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
3646 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3647 |
} |
} |
3648 |
if ((md->ctypes[*eptr++] & ctype_space) == 0) RRETURN(MATCH_NOMATCH); |
if ((md->ctypes[*eptr++] & ctype_space) == 0) RRETURN(MATCH_NOMATCH); |
3649 |
} |
} |
3650 |
break; |
break; |
3651 |
|
|
3652 |
case OP_NOT_WORDCHAR: |
case OP_NOT_WORDCHAR: |
3653 |
for (i = 1; i <= min; i++) |
for (i = 1; i <= min; i++) |
3654 |
{ |
{ |
3655 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
3656 |
{ |
{ |
3657 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
3658 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3659 |
} |
} |
3660 |
if ((md->ctypes[*eptr++] & ctype_word) != 0) |
if ((md->ctypes[*eptr++] & ctype_word) != 0) |
3661 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3662 |
} |
} |
3663 |
break; |
break; |
3664 |
|
|
3665 |
case OP_WORDCHAR: |
case OP_WORDCHAR: |
3666 |
for (i = 1; i <= min; i++) |
for (i = 1; i <= min; i++) |
3667 |
{ |
{ |
3668 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
3669 |
{ |
{ |
3670 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
3671 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3672 |
} |
} |
3673 |
if ((md->ctypes[*eptr++] & ctype_word) == 0) |
if ((md->ctypes[*eptr++] & ctype_word) == 0) |
3674 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3675 |
} |
} |
3676 |
break; |
break; |
3677 |
|
|
3678 |
default: |
default: |
3700 |
{ |
{ |
3701 |
RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM36); |
RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM36); |
3702 |
if (rrc != MATCH_NOMATCH) RRETURN(rrc); |
if (rrc != MATCH_NOMATCH) RRETURN(rrc); |
3703 |
if (fi >= max) |
if (fi >= max) |
3704 |
{ |
{ |
3705 |
CHECK_PARTIAL(); |
CHECK_PARTIAL(); |
3706 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3707 |
} |
} |
3708 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
3709 |
{ |
{ |
3710 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
3711 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3712 |
} |
} |
3713 |
GETCHARINC(c, eptr); |
GETCHARINC(c, eptr); |
3714 |
if (prop_fail_result) RRETURN(MATCH_NOMATCH); |
if (prop_fail_result) RRETURN(MATCH_NOMATCH); |
3715 |
} |
} |
3720 |
{ |
{ |
3721 |
RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM37); |
RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM37); |
3722 |
if (rrc != MATCH_NOMATCH) RRETURN(rrc); |
if (rrc != MATCH_NOMATCH) RRETURN(rrc); |
3723 |
if (fi >= max) |
if (fi >= max) |
3724 |
{ |
{ |
3725 |
CHECK_PARTIAL(); |
CHECK_PARTIAL(); |
3726 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3727 |
} |
} |
3728 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
3729 |
{ |
{ |
3730 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
3731 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3732 |
} |
} |
3733 |
GETCHARINC(c, eptr); |
GETCHARINC(c, eptr); |
3734 |
prop_chartype = UCD_CHARTYPE(c); |
prop_chartype = UCD_CHARTYPE(c); |
3735 |
if ((prop_chartype == ucp_Lu || |
if ((prop_chartype == ucp_Lu || |
3744 |
{ |
{ |
3745 |
RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM38); |
RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM38); |
3746 |
if (rrc != MATCH_NOMATCH) RRETURN(rrc); |
if (rrc != MATCH_NOMATCH) RRETURN(rrc); |
3747 |
if (fi >= max) |
if (fi >= max) |
3748 |
{ |
{ |
3749 |
CHECK_PARTIAL(); |
CHECK_PARTIAL(); |
3750 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3751 |
} |
} |
3752 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
3753 |
{ |
{ |
3754 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
3755 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3756 |
} |
} |
3757 |
GETCHARINC(c, eptr); |
GETCHARINC(c, eptr); |
3758 |
prop_category = UCD_CATEGORY(c); |
prop_category = UCD_CATEGORY(c); |
3759 |
if ((prop_category == prop_value) == prop_fail_result) |
if ((prop_category == prop_value) == prop_fail_result) |
3766 |
{ |
{ |
3767 |
RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM39); |
RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM39); |
3768 |
if (rrc != MATCH_NOMATCH) RRETURN(rrc); |
if (rrc != MATCH_NOMATCH) RRETURN(rrc); |
3769 |
if (fi >= max) |
if (fi >= max) |
3770 |
{ |
{ |
3771 |
CHECK_PARTIAL(); |
CHECK_PARTIAL(); |
3772 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3773 |
} |
} |
3774 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
3775 |
{ |
{ |
3776 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
3777 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3778 |
} |
} |
3779 |
GETCHARINC(c, eptr); |
GETCHARINC(c, eptr); |
3780 |
prop_chartype = UCD_CHARTYPE(c); |
prop_chartype = UCD_CHARTYPE(c); |
3781 |
if ((prop_chartype == prop_value) == prop_fail_result) |
if ((prop_chartype == prop_value) == prop_fail_result) |
3788 |
{ |
{ |
3789 |
RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM40); |
RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM40); |
3790 |
if (rrc != MATCH_NOMATCH) RRETURN(rrc); |
if (rrc != MATCH_NOMATCH) RRETURN(rrc); |
3791 |
if (fi >= max) |
if (fi >= max) |
3792 |
{ |
{ |
3793 |
CHECK_PARTIAL(); |
CHECK_PARTIAL(); |
3794 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3795 |
} |
} |
3796 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
3797 |
{ |
{ |
3798 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
3799 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3800 |
} |
} |
3801 |
GETCHARINC(c, eptr); |
GETCHARINC(c, eptr); |
3802 |
prop_script = UCD_SCRIPT(c); |
prop_script = UCD_SCRIPT(c); |
3803 |
if ((prop_script == prop_value) == prop_fail_result) |
if ((prop_script == prop_value) == prop_fail_result) |
3819 |
{ |
{ |
3820 |
RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM41); |
RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM41); |
3821 |
if (rrc != MATCH_NOMATCH) RRETURN(rrc); |
if (rrc != MATCH_NOMATCH) RRETURN(rrc); |
3822 |
if (fi >= max) |
if (fi >= max) |
3823 |
{ |
{ |
3824 |
CHECK_PARTIAL(); |
CHECK_PARTIAL(); |
3825 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3826 |
} |
} |
3827 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
3828 |
{ |
{ |
3829 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
3830 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3831 |
} |
} |
3832 |
GETCHARINCTEST(c, eptr); |
GETCHARINCTEST(c, eptr); |
3833 |
prop_category = UCD_CATEGORY(c); |
prop_category = UCD_CATEGORY(c); |
3834 |
if (prop_category == ucp_M) RRETURN(MATCH_NOMATCH); |
if (prop_category == ucp_M) RRETURN(MATCH_NOMATCH); |
3855 |
{ |
{ |
3856 |
RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM42); |
RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM42); |
3857 |
if (rrc != MATCH_NOMATCH) RRETURN(rrc); |
if (rrc != MATCH_NOMATCH) RRETURN(rrc); |
3858 |
if (fi >= max) |
if (fi >= max) |
3859 |
{ |
{ |
3860 |
CHECK_PARTIAL(); |
CHECK_PARTIAL(); |
3861 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3862 |
} |
} |
3863 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
3864 |
{ |
{ |
3865 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
3866 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3867 |
} |
} |
3868 |
if (ctype == OP_ANY && IS_NEWLINE(eptr)) |
if (ctype == OP_ANY && IS_NEWLINE(eptr)) |
3869 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
3870 |
GETCHARINC(c, eptr); |
GETCHARINC(c, eptr); |
4022 |
{ |
{ |
4023 |
RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM43); |
RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM43); |
4024 |
if (rrc != MATCH_NOMATCH) RRETURN(rrc); |
if (rrc != MATCH_NOMATCH) RRETURN(rrc); |
4025 |
if (fi >= max) |
if (fi >= max) |
4026 |
{ |
{ |
4027 |
CHECK_PARTIAL(); |
CHECK_PARTIAL(); |
4028 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
4029 |
} |
} |
4030 |
if (eptr >= md->end_subject) |
if (eptr >= md->end_subject) |
4031 |
{ |
{ |
4032 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
4033 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
4034 |
} |
} |
4035 |
if (ctype == OP_ANY && IS_NEWLINE(eptr)) |
if (ctype == OP_ANY && IS_NEWLINE(eptr)) |
4036 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
4037 |
c = *eptr++; |
c = *eptr++; |
4904 |
md->notbol = (options & PCRE_NOTBOL) != 0; |
md->notbol = (options & PCRE_NOTBOL) != 0; |
4905 |
md->noteol = (options & PCRE_NOTEOL) != 0; |
md->noteol = (options & PCRE_NOTEOL) != 0; |
4906 |
md->notempty = (options & PCRE_NOTEMPTY) != 0; |
md->notempty = (options & PCRE_NOTEMPTY) != 0; |
4907 |
md->partial = (options & PCRE_PARTIAL) != 0; |
md->partial = ((options & PCRE_PARTIAL_HARD) != 0)? 2 : |
4908 |
|
((options & PCRE_PARTIAL_SOFT) != 0)? 1 : 0; |
4909 |
md->hitend = FALSE; |
md->hitend = FALSE; |
4910 |
|
|
4911 |
md->recursive = NULL; /* No recursion at top level */ |
md->recursive = NULL; /* No recursion at top level */ |
5263 |
} |
} |
5264 |
} |
} |
5265 |
|
|
5266 |
/* OK, we can now run the match. If "hitend" is set afterwards, remember the |
/* OK, we can now run the match. If "hitend" is set afterwards, remember the |
5267 |
first starting point for which a partial match was found. */ |
first starting point for which a partial match was found. */ |
5268 |
|
|
5269 |
md->start_match_ptr = start_match; |
md->start_match_ptr = start_match; |
5405 |
(pcre_free)(md->offset_vector); |
(pcre_free)(md->offset_vector); |
5406 |
} |
} |
5407 |
|
|
5408 |
if (rc != MATCH_NOMATCH) |
if (rc != MATCH_NOMATCH && rc != PCRE_ERROR_PARTIAL) |
5409 |
{ |
{ |
5410 |
DPRINTF((">>>> error: returning %d\n", rc)); |
DPRINTF((">>>> error: returning %d\n", rc)); |
5411 |
return rc; |
return rc; |
5412 |
} |
} |
5413 |
else if (md->partial && start_partial != NULL) |
else if (start_partial != NULL) |
5414 |
{ |
{ |
5415 |
DPRINTF((">>>> returning PCRE_ERROR_PARTIAL\n")); |
DPRINTF((">>>> returning PCRE_ERROR_PARTIAL\n")); |
5416 |
if (offsetcount > 1) |
if (offsetcount > 1) |
5417 |
{ |
{ |
5418 |
offsets[0] = start_partial - (USPTR)subject; |
offsets[0] = start_partial - (USPTR)subject; |
5419 |
offsets[1] = end_subject - (USPTR)subject; |
offsets[1] = end_subject - (USPTR)subject; |
5420 |
} |
} |
5421 |
return PCRE_ERROR_PARTIAL; |
return PCRE_ERROR_PARTIAL; |
5422 |
} |
} |
5423 |
else |
else |