)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"9aa9a63c999a3573d1df1673bb69174dedcbd66f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"60e4d315_c1d83f33","updated":"2026-09-21 13:25:43.000000000","message":"Claude found additional findings, I have just added those to the patch","commit_id":"97253fcd281bef2f4f428eb5a4542ac9957efd9b"},{"author":{"_account_id":38602,"name":"Torsten Sachse","display_name":"Torsten Sachse","email":"proddi@posteo.de","username":"proddi"},"change_message_id":"57688205e03ce0743aca0fc393d22772243239f5","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"04102d46_bef05871","updated":"2026-11-07 20:03:39.000000000","message":"Thanks for picking this up.\n\nI\u0027d like to propose an improvement that also catches other invalid RFC1035 values.\n\nProblem: values like \u0027foo(bar\u0027 / \u0027foo)bar\u0027 / \u0027foo\"bar\u0027 pass the current check but raise dns.exception.SyntaxError when served, breaking the AXFR (mdns/handler.py).\n\nProposal: validate with the same parser mdns serializes with (dns.rdata.from_text), plus a round-trip so the stored value is exactly what gets served:\n\n    def validate_unquoted_zone_string(value, record_type):\n        try:\n            rdata \u003d dns.rdata.from_text(\n                dns.rdataclass.IN, dns.rdatatype.from_text(record_type), value)\n        except dns.exception.DNSException as e:\n            raise ValueError(\u0027%s record is not valid RFC1035 presentation data: %s\u0027\n                             % (record_type, e))\n        # round-trip check\n        canonical \u003d rdata.to_text()\n        if canonical !\u003d value and canonical !\u003d \u0027\"%s\"\u0027 % value:\n            raise ValueError(\u0027The %s record value would be altered when served; \u0027\n                             \u0027wrap it in double quotes.\u0027 % record_type)\n\nSide notes:\n- Enforces the invariant: stored value \u003d\u003d served value, or rejected.\n- Rejects \"aaa\\;bbb\" (unquoted escaped ;), which the current patchset accepts and serves as \"aaa;bbb\".\n- dns.rdata.from_text also covers \u003e255 length check (SyntaxError: string too long) and rejects non-canonical input (redundant in-quote escapes, raw control bytes).\n\nWhat\u0027s your preferred way to contribute?","commit_id":"97253fcd281bef2f4f428eb5a4542ac9957efd9b"}]}
