]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
tests: fuzz dns resource records
authorEvgeny Vereshchagin <evvers@ya.ru>
Fri, 25 Nov 2022 20:00:30 +0000 (20:00 +0000)
committerEvgeny Vereshchagin <evvers@ya.ru>
Sat, 26 Nov 2022 09:52:09 +0000 (09:52 +0000)
It should help to catch issues like https://github.com/systemd/systemd/issues/19584,
https://github.com/systemd/systemd/issues/25449.

src/resolve/fuzz-resource-record.c [new file with mode: 0644]
src/resolve/meson.build

diff --git a/src/resolve/fuzz-resource-record.c b/src/resolve/fuzz-resource-record.c
new file mode 100644 (file)
index 0000000..15c4659
--- /dev/null
@@ -0,0 +1,35 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "fd-util.h"
+#include "fuzz.h"
+#include "memory-util.h"
+#include "resolved-dns-packet.h"
+
+int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
+        _cleanup_free_ char *out = NULL; /* out should be freed after f */
+        size_t out_size;
+        _cleanup_fclose_ FILE *f = NULL;
+        _cleanup_(dns_resource_record_unrefp) DnsResourceRecord *rr = NULL, *copy = NULL;
+        _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
+
+        if (outside_size_range(size, 0, DNS_PACKET_SIZE_MAX))
+                return 0;
+
+        if (dns_resource_record_new_from_raw(&rr, data, size) < 0)
+                return 0;
+
+        assert_se(copy = dns_resource_record_copy(rr));
+        assert_se(dns_resource_record_equal(copy, rr) > 0);
+
+        assert_se(f = open_memstream_unlocked(&out, &out_size));
+        (void) fprintf(f, "%s", strna(dns_resource_record_to_string(rr)));
+
+        if (dns_resource_record_to_json(rr, &v) < 0)
+                return 0;
+
+        (void) json_variant_dump(v, JSON_FORMAT_PRETTY|JSON_FORMAT_COLOR|JSON_FORMAT_SOURCE, f, NULL);
+        (void) dns_resource_record_to_wire_format(rr, false);
+        (void) dns_resource_record_to_wire_format(rr, true);
+
+        return 0;
+}
index e11aefce7acb7418b2fed984ab926e5924a12d92..cd02c880396eea4cc612f9f43c264293f6bdfecd 100644 (file)
@@ -237,6 +237,11 @@ fuzzers += [
           libshared],
          [lib_openssl_or_gcrypt,
           libm]],
+        [files('fuzz-resource-record.c'),
+         [libsystemd_resolve_core,
+          libshared],
+         [lib_openssl_or_gcrypt,
+          libm]],
 ]
 
 systemd_resolved_sources += files('resolved.c')