commit 7c95a5b: [Minor] Backport some fixes from libucl

Vsevolod Stakhov vsevolod at highsecure.ru
Sun Mar 14 19:07:05 UTC 2021


Author: Vsevolod Stakhov
Date: 2021-03-14 19:03:40 +0000
URL: https://github.com/rspamd/rspamd/commit/7c95a5baa0901af763a09ea684fb07da95f9d06c (HEAD -> master)

[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) {


More information about the Commits mailing list