diff options
Diffstat (limited to 'src/regparse.c')
| -rw-r--r-- | src/regparse.c | 42 | 
1 files changed, 31 insertions, 11 deletions
diff --git a/src/regparse.c b/src/regparse.c index 6e95a14..64923ad 100644 --- a/src/regparse.c +++ b/src/regparse.c @@ -525,7 +525,7 @@ onig_st_insert_strend(hash_table_type* table, const UChar* str_key,  typedef struct {    OnigEncoding enc; -  int    type; // callout type: single or not +  int    type; /* callout type: single or not */    UChar* s;    UChar* end;  } st_callout_name_key; @@ -1583,7 +1583,7 @@ onig_set_callout_of_name(OnigEncoding enc, OnigCalloutType callout_type,      }    } -  r = id; // return id +  r = id;    return r;  } @@ -1637,24 +1637,36 @@ onig_get_callout_tag_end(regex_t* reg, int callout_num)  extern OnigCalloutType  onig_get_callout_type_by_name_id(int name_id)  { +  if (name_id < 0 || name_id >= GlobalCalloutNameList->n) +    return 0; +    return GlobalCalloutNameList->v[name_id].type;  }  extern OnigCalloutFunc  onig_get_callout_start_func_by_name_id(int name_id)  { +  if (name_id < 0 || name_id >= GlobalCalloutNameList->n) +    return 0; +    return GlobalCalloutNameList->v[name_id].start_func;  }  extern OnigCalloutFunc  onig_get_callout_end_func_by_name_id(int name_id)  { +  if (name_id < 0 || name_id >= GlobalCalloutNameList->n) +    return 0; +    return GlobalCalloutNameList->v[name_id].end_func;  }  extern int  onig_get_callout_in_by_name_id(int name_id)  { +  if (name_id < 0 || name_id >= GlobalCalloutNameList->n) +    return 0; +    return GlobalCalloutNameList->v[name_id].in;  } @@ -1685,6 +1697,9 @@ get_callout_opt_default_by_name_id(int name_id, int index)  extern UChar*  onig_get_callout_name_by_name_id(int name_id)  { +  if (name_id < 0 || name_id >= GlobalCalloutNameList->n) +    return 0; +    return GlobalCalloutNameList->v[name_id].name;  } @@ -2689,7 +2704,7 @@ make_absent_engine(Node** node, int pre_save_right_id, Node* absent,    for (i = 0; i < 4; i++) ns[i] = NULL_NODE;    ns[1] = absent; -  ns[3] = step_one; // for err +  ns[3] = step_one; /* for err */    r = node_new_save_gimmick(&ns[0], SAVE_S, env);    if (r != 0) goto err; @@ -5341,8 +5356,11 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)            if (num_type != IS_NOT_NUM) {              if (num_type == IS_REL_NUM) {                gnum = backref_rel_to_abs(gnum, env); -              if (gnum < 0) +              if (gnum < 0) { +                onig_scan_env_set_error_string(env, ONIGERR_UNDEFINED_NAME_REFERENCE, +                                               prev, name_end);                  return ONIGERR_UNDEFINED_GROUP_REFERENCE; +              }              }              tok->u.call.by_number = 1;              tok->u.call.gnum      = gnum; @@ -5563,8 +5581,11 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)                  else {                    if (num_type == IS_REL_NUM) {                      gnum = backref_rel_to_abs(gnum, env); -                    if (gnum < 0) +                    if (gnum < 0) { +                      onig_scan_env_set_error_string(env, +                             ONIGERR_UNDEFINED_NAME_REFERENCE, name, name_end);                        return ONIGERR_UNDEFINED_GROUP_REFERENCE; +                    }                    }                    tok->u.call.by_number = 1;                    tok->u.call.gnum      = gnum; @@ -6583,7 +6604,6 @@ parse_callout_of_contents(Node** np, int cterm, UChar** src, UChar* end, ScanEnv      PFETCH_S(c);    }    else if (c == '>') { /* no needs (default) */ -    //in = ONIG_CALLOUT_IN_PROGRESS;      if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;      PFETCH_S(c);    } @@ -6823,7 +6843,7 @@ parse_callout_of_name(Node** np, int cterm, UChar** src, UChar* end, ScanEnv* en    OnigEncoding enc = env->enc;    UChar* p = *src; -  //PFETCH_READY; +  /* PFETCH_READY; */    if (PEND) return ONIGERR_INVALID_CALLOUT_PATTERN;    node = 0; @@ -7053,12 +7073,12 @@ parse_enclosure(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,          if (PEND) return ONIGERR_END_PATTERN_IN_GROUP; -        if (PPEEK_IS('|')) { // (?~|generator|absent) +        if (PPEEK_IS('|')) { /* (?~|generator|absent) */            PINC;            if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;            head_bar = 1; -          if (PPEEK_IS(')')) { // (?~|)  : range clear +          if (PPEEK_IS(')')) { /* (?~|)  : range clear */              PINC;              r = make_range_clear(np, env);              if (r != 0) return r; @@ -7083,7 +7103,7 @@ parse_enclosure(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,            if (NODE_TYPE(top) != NODE_ALT || IS_NULL(NODE_CDR(top))) {              expr = NULL_NODE;              is_range_cutter = 1; -            //return ONIGERR_INVALID_ABSENT_GROUP_GENERATOR_PATTERN; +            /* return ONIGERR_INVALID_ABSENT_GROUP_GENERATOR_PATTERN; */            }            else {              absent = NODE_CAR(top); @@ -7778,7 +7798,7 @@ parse_exp(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,        len = 1;        while (1) {          if (len >= ONIGENC_MBC_MINLEN(env->enc)) { -          if (len == enclen(env->enc, STR_(*np)->s)) {//should not enclen_end() +          if (len == enclen(env->enc, STR_(*np)->s)) {/* should not enclen_end() */              r = fetch_token(tok, src, end, env);              NODE_STRING_CLEAR_RAW(*np);              goto string_end;  | 
