mirror of
https://github.com/systemd/systemd.git
synced 2025-01-11 09:18:07 +03:00
json: don't assert() if we add a NULL element via json_variant_set_field()
The rest of our JSON code tries hard to magically convert NULL inputs into "null" JSON objects, let's make sure this also works with json_variant_set_field().
This commit is contained in:
parent
fb0321029c
commit
e2c7efd329
@ -515,7 +515,6 @@ static void json_variant_set(JsonVariant *a, JsonVariant *b) {
|
|||||||
|
|
||||||
static void json_variant_copy_source(JsonVariant *v, JsonVariant *from) {
|
static void json_variant_copy_source(JsonVariant *v, JsonVariant *from) {
|
||||||
assert(v);
|
assert(v);
|
||||||
assert(from);
|
|
||||||
|
|
||||||
if (!json_variant_is_regular(from))
|
if (!json_variant_is_regular(from))
|
||||||
return;
|
return;
|
||||||
|
@ -569,6 +569,29 @@ static void test_float(void) {
|
|||||||
test_float_match(w);
|
test_float_match(w);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_equal_text(JsonVariant *v, const char *text) {
|
||||||
|
_cleanup_(json_variant_unrefp) JsonVariant *w = NULL;
|
||||||
|
|
||||||
|
assert_se(json_parse(text, 0, &w, NULL, NULL) >= 0);
|
||||||
|
assert_se(json_variant_equal(v, w) || (!v && json_variant_is_null(w)));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_set_field(void) {
|
||||||
|
_cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
|
||||||
|
|
||||||
|
log_info("/* %s */", __func__);
|
||||||
|
|
||||||
|
test_equal_text(v, "null");
|
||||||
|
assert_se(json_variant_set_field(&v, "foo", NULL) >= 0);
|
||||||
|
test_equal_text(v, "{\"foo\" : null}");
|
||||||
|
assert_se(json_variant_set_field(&v, "bar", JSON_VARIANT_STRING_CONST("quux")) >= 0);
|
||||||
|
test_equal_text(v, "{\"foo\" : null, \"bar\" : \"quux\"}");
|
||||||
|
assert_se(json_variant_set_field(&v, "foo", JSON_VARIANT_STRING_CONST("quux2")) >= 0);
|
||||||
|
test_equal_text(v, "{\"foo\" : \"quux2\", \"bar\" : \"quux\"}");
|
||||||
|
assert_se(json_variant_set_field(&v, "bar", NULL) >= 0);
|
||||||
|
test_equal_text(v, "{\"foo\" : \"quux2\", \"bar\" : null}");
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
test_setup_logging(LOG_DEBUG);
|
test_setup_logging(LOG_DEBUG);
|
||||||
|
|
||||||
@ -622,6 +645,7 @@ int main(int argc, char *argv[]) {
|
|||||||
test_normalize();
|
test_normalize();
|
||||||
test_bisect();
|
test_bisect();
|
||||||
test_float();
|
test_float();
|
||||||
|
test_set_field();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user