]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
dns-domain: make dns_name_change_suffix() work with an empty/null suffix 39324/head
authorLennart Poettering <lennart@poettering.net>
Mon, 13 Oct 2025 09:34:24 +0000 (11:34 +0200)
committerLennart Poettering <lennart@poettering.net>
Mon, 20 Oct 2025 08:35:23 +0000 (10:35 +0200)
src/shared/dns-domain.c
src/test/test-dns-domain.c

index c9788989d83bf337cf33e3c22100a76c3b5cfc9e..d45fbc6343840c77b2eb7aa0d2209775b6299a47 100644 (file)
@@ -27,7 +27,12 @@ int dns_label_unescape(const char **name, char *dest, size_t sz, DNSLabelFlags f
         int r = 0;
 
         assert(name);
-        assert(*name);
+
+        if (isempty(*name)) {
+                if (dest && sz >= 1)
+                        dest[0] = 0;
+                return 0;
+        }
 
         n = *name;
         d = dest;
@@ -649,12 +654,10 @@ int dns_name_change_suffix(const char *name, const char *old_suffix, const char
         int r, q;
 
         assert(name);
-        assert(old_suffix);
-        assert(new_suffix);
         assert(ret);
 
         n = name;
-        s = old_suffix;
+        s = strempty(old_suffix);
 
         for (;;) {
                 char ln[DNS_LABEL_MAX+1], ls[DNS_LABEL_MAX+1];
index f1d11305c1d821e10f461e3b9a0fce4c4c40dbe1..ae73725c8eeb5cfb550ef2b74b391c9b63abc5e7 100644 (file)
@@ -654,6 +654,9 @@ TEST(dns_name_change_suffix) {
         test_dns_name_change_suffix_one("", "", "piff.paff", 1, "piff.paff");
         test_dns_name_change_suffix_one("", "", "", 1, ".");
         test_dns_name_change_suffix_one("a", "b", "c", 0, NULL);
+        test_dns_name_change_suffix_one("wau.wau", "wau", NULL, 1, "wau");
+        test_dns_name_change_suffix_one("wau.wau", NULL, "wau", 1, "wau.wau.wau");
+        test_dns_name_change_suffix_one("wau.wau", NULL, NULL, 1, "wau.wau");
 }
 
 static void test_dns_name_suffix_one(const char *name, unsigned n_labels, const char *result, int ret) {