Project

General

Profile

Feature #5820 » 0002-bug-ss-i-doesn-t-match-x-DF.patch

k_takata (Ken Takata), 01/06/2012 09:31 PM

View differences:

regcomp.c
UChar *p, int slen, UChar *end,
regex_t* reg, Node **rnode)
{
int r, i, j, len, varlen;
int r, i, j, len, varlen, varclen;
Node *anode, *var_anode, *snode, *xnode, *an;
UChar buf[ONIGENC_CODE_TO_MBC_MAXLEN];
*rnode = var_anode = NULL_NODE;
varlen = 0;
varclen = 0;
for (i = 0; i < item_num; i++) {
if (items[i].byte_len != slen) {
varlen = 1;
break;
}
if (items[i].code_len != 1) {
varclen = 1;
}
}
if (varlen != 0) {
......
}
}
if (varclen && !varlen)
return 2;
return varlen;
mem_err2:
......
#define THRESHOLD_CASE_FOLD_ALT_FOR_EXPANSION 8
int r, n, len, alt_num;
int varlen = 0;
UChar *start, *end, *p;
Node *top_root, *root, *snode, *prev_node;
OnigCaseFoldCodeItem items[ONIGENC_GET_CASE_FOLD_CODES_MAX_NUM];
......
r = expand_case_fold_string_alt(n, items, p, len, end, reg, &prev_node);
if (r < 0) goto mem_err;
if (r > 0) varlen = 1;
if (r == 1) {
if (IS_NULL(root)) {
top_root = prev_node;
......
root = NCAR(prev_node);
}
else { /* r == 0 */
else { /* r == 0 || r == 2 */
if (IS_NOT_NULL(root)) {
if (IS_NULL(onig_node_list_add(root, prev_node))) {
onig_node_free(prev_node);
......
/* ending */
top_root = (IS_NOT_NULL(top_root) ? top_root : prev_node);
swap_node(node, top_root);
if (!varlen) {
/* When all expanded strings are same length, case-insensitive
BM search will be used. */
r = update_string_node_case_fold(reg, node);
if (r == 0) {
NSTRING_SET_AMBIG(node);
}
}
else {
swap_node(node, top_root);
r = 0;
}
onig_node_free(top_root);
return 0;
return r;
mem_err:
r = ONIGERR_MEMORY;
......
case NT_STR:
if (IS_IGNORECASE(reg->options) && !NSTRING_IS_RAW(node)) {
#if 0
r = expand_case_fold_string(node, reg);
#else
r = update_string_node_case_fold(reg, node);
if (r == 0) {
NSTRING_SET_AMBIG(node);
}
#endif
}
break;
......
clen = enclen(enc, p, end);
for (j = 0; j < n; j++) {
if (items[j].code_len != 1)
if ((items[j].code_len != 1) || (items[j].byte_len != clen))
return 1; /* different length isn't supported. */
flen = ONIGENC_CODE_TO_MBC(enc, items[j].code[0], buf[j]);
if (flen != clen)
......
clen = enclen(enc, p, end);
for (j = 0; j < n; j++) {
if (items[j].code_len != 1)
if ((items[j].code_len != 1) || (items[j].byte_len != clen))
return 1; /* different length isn't supported. */
flen = ONIGENC_CODE_TO_MBC(enc, items[j].code[0], buf[j]);
if (flen != clen)
......
clen = enclen(enc, p, end);
for (j = 0; j < n; j++) {
if (items[j].code_len != 1)
if ((items[j].code_len != 1) || (items[j].byte_len != clen))
return 1; /* different length isn't supported. */
flen = ONIGENC_CODE_TO_MBC(enc, items[j].code[0], buf[j]);
if (flen != clen)
......
clen = enclen(enc, p, end);
for (j = 0; j < n; j++) {
if (items[j].code_len != 1)
if ((items[j].code_len != 1) || (items[j].byte_len != clen))
return 1; /* different length isn't supported. */
flen = ONIGENC_CODE_TO_MBC(enc, items[j].code[0], buf[j]);
if (flen != clen)
......
if (e->len == 0) return 0;
reg->exact = str_dup(e->s, e->s + e->len);
reg->exact = (UChar* )xmalloc(e->len);
CHECK_NULL_RETURN_MEMERR(reg->exact);
xmemcpy(reg->exact, e->s, e->len);
reg->exact_end = reg->exact + e->len;
allow_reverse =
(4-4/5)