{"record":{"id":"b5c009816e6ceb0d","repo":"TechnitiumSoftware/DnsServer","slug":"dnsserver-blocked-zone-file-version-not-supported","errorCode":null,"errorMessage":"DnsServer blocked zone file version not supported.","messagePattern":"DnsServer blocked zone file version not supported\\.","errorType":"exception","errorClass":"InvalidDataException","httpStatus":null,"severity":"error","filePath":"DnsServerCore/Dns/ZoneManagers/BlockedZoneManager.cs","lineNumber":234,"sourceCode":"                case 1:\n                    int length = bR.ReadInt32();\n                    int i = 0;\n\n                    AuthZoneManager zoneManager = new AuthZoneManager(_dnsServer);\n\n                    zoneManager.LoadSpecialPrimaryZones(delegate ()\n                    {\n                        if (i++ < length)\n                            return s.ReadShortString();\n\n                        return null;\n                    }, _soaRecord, _nsRecord);\n\n                    _zoneManager = zoneManager;\n                    break;\n\n                default:\n                    throw new InvalidDataException(\"DnsServer blocked zone file version not supported.\");\n            }\n        }\n\n        private void WriteConfigTo(Stream s)\n        {\n            IReadOnlyList<AuthZoneInfo> blockedZones = _zoneManager.GetAllZones();\n            BinaryWriter bW = new BinaryWriter(s);\n\n            bW.Write(Encoding.ASCII.GetBytes(\"BZ\")); //format\n            bW.Write((byte)1); //version\n\n            bW.Write(blockedZones.Count);\n\n            foreach (AuthZoneInfo zone in blockedZones)\n                s.WriteShortString(zone.Name);\n        }\n\n        #endregion","sourceCodeStart":216,"sourceCodeEnd":252,"githubUrl":"https://github.com/TechnitiumSoftware/DnsServer/blob/d0484b6c1e7439cdc53d67d81e9c876cda2ad756/DnsServerCore/Dns/ZoneManagers/BlockedZoneManager.cs#L216-L252","documentation":"Thrown by ReadConfigFrom's version switch default case: the blocked-zone config file has a valid 'BZ' header but its version byte is not '1' (the only supported writer version). Protects against reading a file written by an incompatible (newer) server build.","triggerScenarios":"Downgrading to an older server that cannot read a newer blocked-zone file version; a corrupted/edited version byte; file from a different server generation.","commonSituations":"Server version rollback; copying config across mismatched versions; byte corruption after the header.","solutions":["Upgrade the DNS server to a version that supports the file's version.","Delete the blocked-zone config so a fresh version-1 file is regenerated, then reconfigure blocked zones.","Restore from a backup written by the same or older compatible version."],"exampleFix":"// before: blockedZone.bin version = 2 on older server -> throws\n// after: discard and regenerate\n//   rm config/blockedZone.bin   (re-add blocked zones via UI after restart)","handlingStrategy":"validation","validationCode":"static int? ReadBlockedZoneVersion(string path)\n{\n    using var fs = File.OpenRead(path);\n    Span<byte> hdr = stackalloc byte[3];\n    if (fs.Read(hdr) != 3 || hdr[0] != (byte)'B' || hdr[1] != (byte)'Z') return null;\n    return hdr[2]; // supported == 1\n}","typeGuard":null,"tryCatchPattern":"try { blockedZoneManager.Load(); }\ncatch (InvalidDataException ex) when (ex.Message.Contains(\"version not supported\"))\n{ File.Delete(blockedPath); blockedZoneManager.Load(); }","preventionTips":["Do not migrate blocked-zone config across incompatible versions.","On downgrade, delete version-tagged files and reconfigure blocked zones.","After upgrade, verify rollback compatibility before relying on it.","Treat unknown version as regenerate, not retry."],"tags":["dns","blocked-zone","config-file","versioning","serialization"],"backgroundTag":null,"analyzedSha":"d0484b6c1e7439cdc53d67d81e9c876cda2ad756","analyzedAt":"2026-08-13T22:57:35.508Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}