diff --git a/src/parser.c b/src/parser.c index a5f5c6b..3303041 100644 --- a/src/parser.c +++ b/src/parser.c @@ -979,7 +979,7 @@ lyp_precompile_pattern(struct ly_ctx *ctx, const char *pattern, pcre** pcre_cmp, * @param[in] data2 If \p type is #LY_TYPE_BITS: (int *) type bit field length, * #LY_TYPE_DEC64: (uint8_t *) number of fraction digits (position of the floating point), * otherwise ignored. - * @return 1 if a conversion took place, 0 if the value was kept the same, -1 on error. + * @return 1 if a conversion took place, 0 if the value was kept the same. */ static int make_canonical(struct ly_ctx *ctx, int type, const char **value, void *data1, void *data2) @@ -994,8 +994,6 @@ make_canonical(struct ly_ctx *ctx, int type, const char **value, void *data1, vo uint64_t unum; uint8_t c; -#define LOGBUF(str) LOGERR(ctx, LY_EINVAL, "Value \"%s\" is too long.", str) - switch (type) { case LY_TYPE_BITS: bits = (struct lys_type_bit **)data1; @@ -1008,10 +1006,8 @@ make_canonical(struct ly_ctx *ctx, int type, const char **value, void *data1, vo continue; } if (buf[0]) { - LY_CHECK_ERR_RETURN(strlen(buf) + 1 + strlen(bits[i]->name) > buf_len, LOGBUF(bits[i]->name), -1); sprintf(buf + strlen(buf), " %s", bits[i]->name); } else { - LY_CHECK_ERR_RETURN(strlen(bits[i]->name) > buf_len, LOGBUF(bits[i]->name), -1); strcpy(buf, bits[i]->name); } } @@ -1021,17 +1017,15 @@ make_canonical(struct ly_ctx *ctx, int type, const char **value, void *data1, vo module_name = (const char *)data1; /* identity must always have a prefix */ if (!strchr(*value, ':')) { - LY_CHECK_ERR_RETURN(strlen(module_name) + 1 + strlen(*value) > buf_len, LOGBUF(*value), -1); sprintf(buf, "%s:%s", module_name, *value); } else { - LY_CHECK_ERR_RETURN(strlen(*value) > buf_len, LOGBUF(*value), -1); strcpy(buf, *value); } break; case LY_TYPE_INST: exp = lyxp_parse_expr(ctx, *value); - LY_CHECK_ERR_RETURN(!exp, LOGINT(ctx), -1); + LY_CHECK_ERR_RETURN(!exp, LOGINT(ctx), 0); module_name = NULL; count = 0; @@ -1041,9 +1035,9 @@ make_canonical(struct ly_ctx *ctx, int type, const char **value, void *data1, vo /* copy WS */ if (i && ((end = exp->expr + exp->expr_pos[i - 1] + exp->tok_len[i - 1]) != cur_expr)) { if (count + (cur_expr - end) > buf_len) { + LOGINT(ctx); lyxp_expr_free(exp); - LOGBUF(end); - return -1; + return 0; } strncpy(&buf[count], end, cur_expr - end); count += cur_expr - end; @@ -1057,9 +1051,9 @@ make_canonical(struct ly_ctx *ctx, int type, const char **value, void *data1, vo if (!module_name || strncmp(cur_expr, module_name, j)) { /* print module name with colon, it does not equal to the parent one */ if (count + j > buf_len) { + LOGINT(ctx); lyxp_expr_free(exp); - LOGBUF(cur_expr); - return -1; + return 0; } strncpy(&buf[count], cur_expr, j); count += j; @@ -1068,17 +1062,17 @@ make_canonical(struct ly_ctx *ctx, int type, const char **value, void *data1, vo /* copy the rest */ if (count + (exp->tok_len[i] - j) > buf_len) { + LOGINT(ctx); lyxp_expr_free(exp); - LOGBUF(end); - return -1; + return 0; } strncpy(&buf[count], end, exp->tok_len[i] - j); count += exp->tok_len[i] - j; } else { if (count + exp->tok_len[i] > buf_len) { - LOGBUF(&exp->expr[exp->expr_pos[i]]); + LOGINT(ctx); lyxp_expr_free(exp); - return -1; + return 0; } strncpy(&buf[count], &exp->expr[exp->expr_pos[i]], exp->tok_len[i]); count += exp->tok_len[i]; @@ -1087,7 +1081,7 @@ make_canonical(struct ly_ctx *ctx, int type, const char **value, void *data1, vo if (count > buf_len) { LOGINT(ctx); lyxp_expr_free(exp); - return -1; + return 0; } buf[count] = '\0'; @@ -1152,8 +1146,6 @@ make_canonical(struct ly_ctx *ctx, int type, const char **value, void *data1, vo } return 0; - -#undef LOGBUF } static const char * @@ -1419,10 +1411,7 @@ lyp_parse_value(struct lys_type *type, const char **value_, struct lyxml_elem *x c = c + len; } - if (make_canonical(ctx, LY_TYPE_BITS, value_, bits, &type->info.bits.count) == -1) { - free(bits); - goto error; - } + make_canonical(ctx, LY_TYPE_BITS, value_, bits, &type->info.bits.count); if (store) { /* store the result */ @@ -1480,9 +1469,7 @@ lyp_parse_value(struct lys_type *type, const char **value_, struct lyxml_elem *x goto error; } - if (make_canonical(ctx, LY_TYPE_DEC64, value_, &num, &type->info.dec64.dig) == -1) { - goto error; - } + make_canonical(ctx, LY_TYPE_DEC64, value_, &num, &type->info.dec64.dig); if (store) { /* store the result */ @@ -1610,10 +1597,7 @@ lyp_parse_value(struct lys_type *type, const char **value_, struct lyxml_elem *x type->parent->flags |= LYS_DFLTJSON; } - if (make_canonical(ctx, LY_TYPE_IDENT, &value, (void*)lys_main_module(local_mod)->name, NULL) == -1) { - lydict_remove(ctx, value); - goto error; - } + make_canonical(ctx, LY_TYPE_IDENT, &value, (void*)lys_main_module(local_mod)->name, NULL); /* replace the old value with the new one (even if they may be the same) */ lydict_remove(ctx, *value_); @@ -1666,11 +1650,7 @@ lyp_parse_value(struct lys_type *type, const char **value_, struct lyxml_elem *x /* turn logging back on */ ly_ilo_restore(NULL, prev_ilo, NULL, 0); } else { - if ((c = make_canonical(ctx, LY_TYPE_INST, &value, NULL, NULL))) { - if (c == -1) { - goto error; - } - + if (make_canonical(ctx, LY_TYPE_INST, &value, NULL, NULL)) { /* if a change occured, value was removed from the dicionary so fix the pointers */ *value_ = value; } @@ -1772,9 +1752,7 @@ lyp_parse_value(struct lys_type *type, const char **value_, struct lyxml_elem *x goto error; } - if (make_canonical(ctx, LY_TYPE_INT8, value_, &num, NULL) == -1) { - goto error; - } + make_canonical(ctx, LY_TYPE_INT8, value_, &num, NULL); if (store) { /* store the result */ @@ -1789,9 +1767,7 @@ lyp_parse_value(struct lys_type *type, const char **value_, struct lyxml_elem *x goto error; } - if (make_canonical(ctx, LY_TYPE_INT16, value_, &num, NULL) == -1) { - goto error; - } + make_canonical(ctx, LY_TYPE_INT16, value_, &num, NULL); if (store) { /* store the result */ @@ -1806,9 +1782,7 @@ lyp_parse_value(struct lys_type *type, const char **value_, struct lyxml_elem *x goto error; } - if (make_canonical(ctx, LY_TYPE_INT32, value_, &num, NULL) == -1) { - goto error; - } + make_canonical(ctx, LY_TYPE_INT32, value_, &num, NULL); if (store) { /* store the result */ @@ -1824,9 +1798,7 @@ lyp_parse_value(struct lys_type *type, const char **value_, struct lyxml_elem *x goto error; } - if (make_canonical(ctx, LY_TYPE_INT64, value_, &num, NULL) == -1) { - goto error; - } + make_canonical(ctx, LY_TYPE_INT64, value_, &num, NULL); if (store) { /* store the result */ @@ -1841,9 +1813,7 @@ lyp_parse_value(struct lys_type *type, const char **value_, struct lyxml_elem *x goto error; } - if (make_canonical(ctx, LY_TYPE_UINT8, value_, &unum, NULL) == -1) { - goto error; - } + make_canonical(ctx, LY_TYPE_UINT8, value_, &unum, NULL); if (store) { /* store the result */ @@ -1858,9 +1828,7 @@ lyp_parse_value(struct lys_type *type, const char **value_, struct lyxml_elem *x goto error; } - if (make_canonical(ctx, LY_TYPE_UINT16, value_, &unum, NULL) == -1) { - goto error; - } + make_canonical(ctx, LY_TYPE_UINT16, value_, &unum, NULL); if (store) { /* store the result */ @@ -1875,9 +1843,7 @@ lyp_parse_value(struct lys_type *type, const char **value_, struct lyxml_elem *x goto error; } - if (make_canonical(ctx, LY_TYPE_UINT32, value_, &unum, NULL) == -1) { - goto error; - } + make_canonical(ctx, LY_TYPE_UINT32, value_, &unum, NULL); if (store) { /* store the result */ @@ -1892,9 +1858,7 @@ lyp_parse_value(struct lys_type *type, const char **value_, struct lyxml_elem *x goto error; } - if (make_canonical(ctx, LY_TYPE_UINT64, value_, &unum, NULL) == -1) { - goto error; - } + make_canonical(ctx, LY_TYPE_UINT64, value_, &unum, NULL); if (store) { /* store the result */