v->sensitive = true;
}
+bool json_variant_is_sensitive(JsonVariant *v) {
+ v = json_variant_formalize(v);
+ if (!json_variant_is_regular(v))
+ return false;
+
+ return v->sensitive;
+}
+
+static void json_variant_propagate_sensitive(JsonVariant *from, JsonVariant *to) {
+ if (json_variant_is_sensitive(from))
+ json_variant_sensitive(to);
+}
+
int json_variant_get_source(JsonVariant *v, const char **ret_source, unsigned *ret_line, unsigned *ret_column) {
assert_return(v, -EINVAL);
if (r < 0)
return r;
+ json_variant_propagate_sensitive(*v, w);
+
json_variant_unref(*v);
*v = TAKE_PTR(w);
if (r < 0)
return r;
+ json_variant_propagate_sensitive(*v, w);
+
json_variant_unref(*v);
*v = TAKE_PTR(w);
if (r < 0)
return r;
+ json_variant_propagate_sensitive(*v, w);
+ json_variant_propagate_sensitive(m, w);
+
json_variant_unref(*v);
*v = TAKE_PTR(w);
r = json_variant_new_array(&nv, array, i + 1);
}
-
if (r < 0)
return r;
+ json_variant_propagate_sensitive(*v, nv);
+
json_variant_unref(*v);
*v = TAKE_PTR(nv);
memcpy_safe(&c->value, source, k);
+ json_variant_propagate_sensitive(v, c);
+
*nv = c;
return 0;
}
r = json_variant_new_object(&n, a, m);
if (r < 0)
return r;
+
+ json_variant_propagate_sensitive(*v, n);
+
if (!n->sorted) /* Check if this worked. This will fail if there are multiple identical keys used. */
return -ENOTUNIQ;
}
if (r < 0)
goto finish;
+
+ json_variant_propagate_sensitive(*v, n);
+
if (!n->normalized) { /* Let's see if normalization worked. It will fail if there are multiple
* identical keys used in the same object anywhere, or if there are floating
* point numbers used (see below) */