\r
case ENCLOSE_STOP_BACKTRACK:\r
if (IS_ENCLOSE_STOP_BT_SIMPLE_REPEAT(node)) {\r
+ if (node->target == NULL) {\r
+ CHECK_NULL_RETURN_MEMERR(node->target);\r
+ }\r
QtfrNode* qn = NQTFR(node->target);\r
tlen = compile_length_tree(qn->target, reg);\r
if (tlen < 0) return tlen;\r
int r, i, j, len, varlen;\r
Node *anode, *var_anode, *snode, *xnode, *an;\r
UChar buf[ONIGENC_CODE_TO_MBC_MAXLEN];\r
+ xnode = NULL_NODE;\r
\r
*rnode = var_anode = NULL_NODE;\r
\r
}\r
\r
if (items[i].byte_len != slen) {\r
- Node *rem;\r
+ Node *rem = NULL_NODE;\r
UChar *q = p + items[i].byte_len;\r
\r
if (q < end) {\r
NCAR(an) = snode;\r
}\r
\r
+ if (var_anode == NULL) {\r
+ onig_node_free(an);\r
+ onig_node_free(xnode);\r
+ onig_node_free(rem);\r
+ goto mem_err2;\r
+ }\r
NCDR(var_anode) = an;\r
var_anode = an;\r
}\r
#endif\r
\r
r = onig_parse_make_tree(&root, pattern, pattern_end, reg, &scan_env);\r
- if (r != 0) goto err;\r
+ if (r != 0 || root == NULL) goto err;\r
\r
#ifdef USE_NAMED_GROUP\r
/* mixed use named group and no-named group */\r
int result;\r
\r
key = (st_str_end_key* )xmalloc(sizeof(st_str_end_key));\r
+ CHECK_NULL_RETURN_MEMERR(key);\r
key->s = (UChar* )str_key;\r
key->end = (UChar* )end_key;\r
result = onig_st_insert(table, (st_data_t )(UINTN)key, value);\r
#ifdef USE_ST_LIBRARY\r
if (IS_NULL(t)) {\r
t = onig_st_init_strend_table_with_size(5);\r
+ CHECK_NULL_RETURN_MEMERR(t);\r
reg->name_table = (void* )t;\r
}\r
e = (NameEntry* )xmalloc(sizeof(NameEntry));\r
if (IS_NULL(env->mem_nodes_dynamic)) {\r
alloc = INIT_SCANENV_MEMNODES_ALLOC_SIZE;\r
p = (Node** )xmalloc(sizeof(Node*) * alloc);\r
+ CHECK_NULL_RETURN_MEMERR(p);\r
+ \r
xmemcpy(p, env->mem_nodes_static,\r
sizeof(Node*) * SCANENV_MEMNODES_SIZE);\r
}\r
node_new_str_raw(UChar* s, UChar* end)\r
{\r
Node* node = node_new_str(s, end);\r
+ CHECK_NULL_RETURN(node);\r
NSTRING_SET_RAW(node);\r
return node;\r
}\r
p = onigenc_get_prev_char_head(enc, sn->s, sn->end);\r
if (p && p > sn->s) { /* can be splitted. */\r
n = node_new_str(p, sn->end);\r
+ CHECK_NULL_RETURN(n);\r
if ((sn->flag & NSTR_RAW) != 0)\r
NSTRING_SET_RAW(n);\r
sn->end = (UChar* )p;\r
QtfrNode* qnt = NQTFR(target);\r
int nestq_num = popular_quantifier_num(qn);\r
int targetq_num = popular_quantifier_num(qnt);\r
+ if (nestq_num < 0 || targetq_num < 0) {\r
+ return ONIGERR_TYPE_BUG;\r
+ }\r
\r
#ifdef USE_WARNING_REDUNDANT_NESTED_REPEAT_OPERATOR\r
if (!IS_QUANTIFIER_BY_NUMBER(qn) && !IS_QUANTIFIER_BY_NUMBER(qnt) &&\r
cc = NCCLASS(*np);\r
NCCLASS_SET_SHARE(cc);\r
new_key = (type_cclass_key* )xmalloc(sizeof(type_cclass_key));\r
+ CHECK_NULL_RETURN_MEMERR(new_key);\r
xmemcpy(new_key, &key, sizeof(type_cclass_key));\r
onig_st_add_direct(OnigTypeCClassTable, (st_data_t )(UINTN)new_key,\r
(st_data_t )(UINTN)*np);\r
\r
case TK_ANCHOR:\r
*np = onig_node_new_anchor(tok->u.anchor);\r
+ CHECK_NULL_RETURN_MEMERR(*np);\r
break;\r
\r
case TK_OP_REPEAT:\r
return ONIGERR_TARGET_OF_REPEAT_OPERATOR_NOT_SPECIFIED;\r
else\r
*np = node_new_empty();\r
+ CHECK_NULL_RETURN_MEMERR(*np);\r
}\r
else {\r
goto tk_byte;\r
}\r
else {\r
*top = node_new_list(node, NULL);\r
+ CHECK_NULL_RETURN_MEMERR(*top);\r
headp = &(NCDR(*top));\r
while (r != TK_EOT && r != term && r != TK_ALT) {\r
r = parse_exp(&node, tok, term, src, end, env);\r
+ CHECK_NULL_RETURN_MEMERR(node);\r
if (r < 0) return r;\r
\r
if (NTYPE(node) == NT_LIST) {\r
}\r
else if (r == TK_ALT) {\r
*top = onig_node_new_alt(node, NULL);\r
+ CHECK_NULL_RETURN_MEMERR(*top);\r
headp = &(NCDR(*top));\r
while (r == TK_ALT) {\r
r = fetch_token(tok, src, end, env);\r