From 7c95a5baa0901af763a09ea684fb07da95f9d06c Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Sun, 14 Mar 2021 19:03:40 +0000 Subject: [PATCH] [Minor] Backport some fixes from libucl --- contrib/libucl/ucl_chartable.h | 2 +- contrib/libucl/ucl_schema.c | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/contrib/libucl/ucl_chartable.h b/contrib/libucl/ucl_chartable.h index 043b62689..7571a1d91 100644 --- a/contrib/libucl/ucl_chartable.h +++ b/contrib/libucl/ucl_chartable.h @@ -49,7 +49,7 @@ UCL_CHARACTER_VALUE_END /* # */, UCL_CHARACTER_VALUE_STR /* $ */, UCL_CHARACTER_VALUE_STR /* % */, UCL_CHARACTER_VALUE_STR /* & */, UCL_CHARACTER_VALUE_STR /* ' */, UCL_CHARACTER_VALUE_STR /* ( */, UCL_CHARACTER_VALUE_STR /* ) */, UCL_CHARACTER_VALUE_STR /* * */, -UCL_CHARACTER_VALUE_STR|UCL_CHARACTER_VALUE_DIGIT /* + */, +UCL_CHARACTER_VALUE_STR|UCL_CHARACTER_VALUE_DIGIT|UCL_CHARACTER_UCL_UNSAFE /* + */, UCL_CHARACTER_VALUE_END /* , */, UCL_CHARACTER_KEY|UCL_CHARACTER_VALUE_STR|UCL_CHARACTER_VALUE_DIGIT_START|UCL_CHARACTER_VALUE_DIGIT /* - */, UCL_CHARACTER_KEY|UCL_CHARACTER_VALUE_STR|UCL_CHARACTER_VALUE_DIGIT /* . */, diff --git a/contrib/libucl/ucl_schema.c b/contrib/libucl/ucl_schema.c index d11d66909..68f01187e 100644 --- a/contrib/libucl/ucl_schema.c +++ b/contrib/libucl/ucl_schema.c @@ -244,20 +244,22 @@ ucl_schema_validate_object (const ucl_object_t *schema, /* Additional properties */ if (!allow_additional || additional_schema != NULL) { /* Check if we have exactly the same properties in schema and object */ - iter = NULL; + iter = ucl_object_iterate_new (obj); prop = ucl_object_lookup (schema, "properties"); - while ((elt = ucl_object_iterate (obj, &iter, true)) != NULL) { + while ((elt = ucl_object_iterate_safe (iter, true)) != NULL) { found = ucl_object_lookup (prop, ucl_object_key (elt)); if (found == NULL) { /* Try patternProperties */ - piter = NULL; pat = ucl_object_lookup (schema, "patternProperties"); - while ((pelt = ucl_object_iterate (pat, &piter, true)) != NULL) { + piter = ucl_object_iterate_new (pat); + while ((pelt = ucl_object_iterate_safe (piter, true)) != NULL) { found = ucl_schema_test_pattern (obj, ucl_object_key (pelt), true); if (found != NULL) { break; } } + ucl_object_iterate_free (piter); + piter = NULL; } if (found == NULL) { if (!allow_additional) { @@ -276,6 +278,8 @@ ucl_schema_validate_object (const ucl_object_t *schema, } } } + ucl_object_iterate_free (iter); + iter = NULL; } /* Required properties */ if (required != NULL) { -- 2.39.5