#915 Improve error management for og_json_parse_partition()

Validate json input and return an error code when parsing is not correct.
master
Roberto Hueso Gómez 2019-10-07 12:09:43 +02:00 committed by OpenGnSys Support Team
parent ad4d4bdbbe
commit e3af7eed4d
1 changed files with 23 additions and 7 deletions

View File

@ -3297,13 +3297,28 @@ static int og_json_parse_string(json_t *element, const char **str)
return 0; return 0;
} }
static void og_json_parse_partition(json_t *element, og_partition *part) static int og_json_parse_partition(json_t *element, og_partition *part)
{ {
part->number = json_string_value(json_object_get(element, "partition")); const char *key;
part->code = json_string_value(json_object_get(element, "code")); json_t *value;
part->filesystem = json_string_value(json_object_get(element, "filesystem")); int err = 0;
part->size = json_string_value(json_object_get(element, "size"));
part->format = json_string_value(json_object_get(element, "format")); json_object_foreach(element, key, value) {
if (!strcmp(key, "partition"))
err = og_json_parse_string(value, &part->number);
else if (!strcmp(key, "code"))
err = og_json_parse_string(value, &part->code);
else if (!strcmp(key, "filesystem"))
err = og_json_parse_string(value, &part->filesystem);
else if (!strcmp(key, "size"))
err = og_json_parse_string(value, &part->size);
else if (!strcmp(key, "format"))
err = og_json_parse_string(value, &part->format);
if (err < 0)
return err;
}
return err;
} }
static int og_json_parse_partition_setup(json_t *element, og_partition *part) static int og_json_parse_partition_setup(json_t *element, og_partition *part)
@ -3320,7 +3335,8 @@ static int og_json_parse_partition_setup(json_t *element, og_partition *part)
if (json_typeof(k) != JSON_OBJECT) if (json_typeof(k) != JSON_OBJECT)
return -1; return -1;
og_json_parse_partition(k, part + i); if (og_json_parse_partition(k, part + i) != 0)
return -1;
} }
return 0; return 0;
} }